Android——Log,Toast提示框,Intent跳转

Log

  1. Log.v()。verbose,详细,啰嗦;打印所有日志。
  2. Log.d()。debug。
  3. Log.i()。info。
  4. Log.w()。warn。
  5. Log.e()。error。
    使用:Log.d("tag:一般传入当前Activity","想要打印的具体内容");
    查看:通过下方提示,也可以自定义过滤器。

Toast

一种Android提供的提醒方式。
举例:

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_layout);
    Button button1 = findViewById(R.id.button_1); //findView获取监听的元素
    button1.setOnClickListener(new View.OnClickListener() {  //设置监听器
        @Override
        public void onClick(View v) {
        	//makeText里的三个参数:(Context,Toast文本,显示时长),暂时不懂Context(上下文)是个什么东西。
            Toast.makeText(MainActivity.this,"你再戳一次试试!",Toast.LENGTH_SHORT).show(); 
        }
    });
}

在这里插入图片描述

跳转页面——显式、隐式Intent

intent,意图;分显式和隐式,显式就是指明由谁跳转到谁,隐式是匹配actioncategory(这俩源自AndroidManifest.xml各个active的<intent-filter>......</intent-filter>里或Android系统内置action),然后由用户选择响应哪个活动。隐式举例:打开一个链接,系统通过actioncategory匹配到系统浏览器、chrome等多个活动都满足条件,然后手机就会提示你用哪个浏览器打开该链接。

1.显式intent,直接指明由A跳转到B。

Intent intent = new Intent(A.this,B.class);      //定义一个intent
startActivity(intent);         //启动intent

2.隐式intent。
第一步.在AndroidManifestactivity标签里定义actioncategory
第二步.某intent匹配actioncategory,响应该活动。
举例如下:首先,要这样。

		<activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

其次,要这样。

		 Intent intent = new Intent("com.example.activitytest.ACTION_START");//对应(1)action里的字符串
         startActivity(intent);

由于category是.DEFAULT默认的,所以intent匹配时只对应action就行了。
如果要在intent里表示category,可以在上面第二步的中间加一行。

		 Intent intent = new Intent("com.example.activitytest.ACTION_START");   //对第一步action里的字符串
		 //此处增加如下category信息。相应的也要在AndroidManifest的某活动(Activity)的标签里注册BALABALA这个category。
         intent.addCategory("com.example.activitytest.BALABALA")   
         startActivity(intent)

3.更多隐式Intent的用法
隐式Intent不仅可以调用自己程序里的活动(Activity),还可以启动其他程序的活动(Activity)。例如启动浏览器、拨号等,这些程序系统已经内置ACTION,直接用隐式intent匹配、调用就行了,不需要自己实现。例如浏览器的action是:Intent.ACTION_VIEW;拨号的action是Intent.ACTION_DIAL。
举例如下:调用浏览器。
啊┗|`O′|┛ 嗷~~,模拟器连不上网,于是网上找解决方法,有重启的、有改DNS,嫌麻烦,我直接清空模拟器数据,相当于手机恢复出厂设置,神了个奇。
在这里插入图片描述
书接正文,开始调用Android其他程序。
注释:Uri.parse的作用是解析字符串,下面这个例子是http协议,所以转为URL;如果调用“拨号”程序,则data部分(举例:tel:10086)根据tel协议和后面号码打开系统拨号界面。
打开浏览器:

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_layout);
    Button button1 = findViewById(R.id.button_1);
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_VIEW); //第一行
            intent.setData(Uri.parse("http://www.baidu.com")); //第二行,Uri.parse将字符串转为URL,作为参数传入setData()方法。
            startActivity(intent); //第三行
        }
    });
}

在这里插入图片描述
打开拨号界面:

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

在这里插入图片描述

带数据的跳转

A向下一个活动B传递数据

A传出数据:intent.putExtra();
Intent提供了一系列putExtra()方法传递数据,该方法包含俩参数:键值对。前面"键"相当于起个名字,方便其它活动用这个名字调用数据,后面“值”才是真正要传输的数据。

B取出数据:getStringExtra、getIntExtra、getBooleanExtra等,依此类推。

intent = getIntent();
String data = intent.getStringExtra("extra_data")
Log.d("SecondActivity",data)

A向B发送数据:再戳一下试试!
在这里插入图片描述

A用startActivityForResult()方式启动B,B向A传递数据

A:先在onCreate()里用startActivityForResult()启动B,当 B finish();后返回A的onActivityResult()方法。
onActivityResult()方法里有三个参数:第一个requestCode,本活动onCreatestartActivityForResult(intent,1)里的1;第二个resultCode,B里setResult()的RESULT_OK或RESULT_CANCELED;data,B传出来的intent。结果如图表示:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        Button button1 = findViewById(R.id.button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String data = "再戳一下试试!";
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                startActivityForResult(intent,1);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    String returnedData = data.getStringExtra("data_return");
                    Log.d("MainActivity", returnedData);
                }
                break;
                default:
        }
    }
}

B:通过监听button返回消息并且finish,或者通过手机下方Back键(onBackPressed())返回。
返回消息:setResult()方法接受两个参数,第一个一般是RESULT_OK或RESULT_CANCELED,第二个是带有data的intent。
当B活动销毁finish时,请看上面onActivityResult()方法。

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
        Button button2 = findViewById(R.id.button_2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) { //通过APP内Button返回
                Intent intent = new Intent();
                intent.putExtra("data_return", "试试就试试");
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }

    @Override
    public void onBackPressed() { //通过手机下方Back键返回
        Intent intent = new Intent();
        intent.putExtra("data_return", "试试就试试");
        setResult(RESULT_OK, intent);
        finish();
    }
}

在这里插入图片描述

这篇随笔参考《第一行代码——Android》+本人学习时所犯错误总结而成,环境是Android Studio 3.3.1。

猜你喜欢

转载自blog.csdn.net/spicyStrip/article/details/88200743