Android——Intent的显示跳转、隐式跳转、以及页面间传值与回调(startActivityForResult、startActivity、setResult、onActivityResul)

最近重新温故下Android基础,就一点点从基础再看一遍,参考的基础书籍是《第一行代码》,所以代码一点程度都跟书籍上面一样,这些代码不是我博客的重点,博客的重点是使用这些东西需要注意的地方,所有内容均是为了记录本人学习,如有侵权,请联系本人,谢谢!

1、Intent的显示跳转:
MainActivity跳转到MainActivity1:

 //显示Intent
 Intent intent=new Intent(MainActivity.this,MainActivity1.class);
 intent.putExtra("data", "Hello	MainActivity1");
 //一般只需要跳转页面(可传值)采用
 startActivity(intent);
 
 //如果在MainActivity1中返回MainActivity页面需要传值(回调),则需要采用这个跳转,这样才能在最开始的页面的onActivityResult监听
 startActivityForResult(intent,1);

2、Intent的隐式跳转:

 btn2 = (Button) findViewById(R.id.btn_2);
 btn2.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
    //隐式Intent
    //这里的值"com.wzq.demo_practice_1.ACTION_START"是你在manifest注册Activity里面的值,请看下面的代码
 	// Intent intent=new Intent("com.wzq.demo_practice_1.ACTION_START");
    // startActivity(intent);

  	//隐式跳转浏览器
	//  Intent intent	=	new	Intent(Intent.ACTION_VIEW);
	// intent.setData(Uri.parse("http://www.baidu.com"));
	// startActivity(intent);

   //隐式跳转拨号界面
    Intent	intent	=	new	Intent(Intent.ACTION_DIAL);
    intent.setData(Uri.parse("tel:10086"));
    startActivity(intent);
            }
        });

隐式跳转的Manifest里面配置的

 <activity
            android:name=".MainActivity2"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.wzq.demo_practice_1.ACTION_START"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
 </activity>

3、页面间的传值:
传值:

 Intent intent=new Intent(MainActivity.this,MainActivity1.class);
 intent.putExtra("data", "Hello	MainActivity1");
 //一般只需要跳转页面(可传值)采用
 startActivity(intent);

接收:
一般在onCreate方法里面接收值,方便在页面创建的时候需要通过数据进行逻辑处理等

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent=getIntent();
        String value=intent.getStringExtra("data");
    }

4、页面返回回调:
这里需要注意
1、就是调往该页面的方式必须是 startActivityForResult(intent,1);
2、两个页面的manifest配置的启动模式必须在同一个栈,且必须是“standard” --默认模式和“singleTop”–栈顶模式 这两种启动模式才能回调成功

android:launchMode="singleTop"

3、就是startActivityForResult()方法中的请求码必须大于等于0;

附上代码:
MainActivity1->MainActivity
MainActivity的onActivityResult方法:

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

MainActivity1的代码:

btn1 = (Button) findViewById(R.id.btn_1);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("data_return", "Hello	FirstActivity");
                setResult(RESULT_OK, intent);
                finish();
            }
        });

如果是需要在点击返回键的时候触发回调,可以重写这个方法:

@Override
    public void onBackPressed() {
        Intent intent = new Intent();
        intent.putExtra("data_return", "Hello	FirstActivity");
        setResult(RESULT_OK, intent);
        finish();
    }

如果是在setResult在onPuase/onStop等地方设置,解决方案是

//重写onBackPressed
public void onBackPressed(){
   	 Intent intent = new Intent();
     intent.putExtra("data_return", "Hello	FirstActivity");
     setResult(RESULT_OK, intent);
    super.onBackPressed();  
}

嗯,本篇博客就到这里了 ,如果帮助到你就给我点个赞吧!谢谢大xiong dei

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值