Android Activity 回传值

记录一下Activity往上级回传值的一些心得,及疑问。

需求: Activity A -> Activity B,并把一个Object instance(p) 传给B,Activity B 中,p的一些数据会实时更新,当用户返回A 时,需要把p带回给A,

方法 1  startActivityForResult()

A 中:

Intent intent = new Intent(this, B.class);
intent.putExtra("key",value);
startActivityForResult(intent,Request_Code);

*注意: Activity B 不能用 (singleTask)启动,不然A会直接受到Result_Cancel,从而无法有返回值。

A中加入callback method: onActivityResult(),需要对requestCode and resulteCode 进行判断。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

      switch(resultCode){
        case Activity.RESULT_CANCELED:{}
        case Activity.RESULT_OK: {
          if (requestCode==Request_Code){
            P p = data.getParcelableExtra("panel");
          }
        }
        default: ...
      }

}    

Activity B 中:设置给activity左上角的<Home  以及 Back button: onBackPressed() 中设置回传

public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case android.R.id.home:
                Intent intent = NavUtils.getParentActivityIntent(this);   //get inent
                intent.putExtra("key",p);                     //put in p instance     
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);       //set intent flag

                setResult(Activity.RESULT_OK,intent);             //set resultCode and intent
                finish();
                return true;

             default:   return super.onOptionsItemSelected(item);
        }
    }                    

这样按下返回Home或Back后,会调用 A中 的onResultActivity() callback, A就能接收到 p (implements Parcable)

方法2: 用onNewIntent(),不需要检测request_code 和result_code

A 中: startActivity(intent, B.class);

并添加callback  onNewIntent()

        @Override
    protected void onNewIntent(Intent intent) {

        setIntent(intent);
        Intent newIntent = getIntent();

        ...
        super.onNewIntent(intent);

    }    

B 中:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);intent.putExtra(...);NavUnit.navigateUpTo(this,intent);

A会得到一个新的intent。

总结: startActivity() 和 startActivityForResult() 都可以得到得到回传值,但回传之后的callback 不同,前者用onNewIntent(),后者用onResultActivity()。后者可以用requestCode来控制不同的传递,用resultCode来表示状态。
时间: 2024-10-05 15:31:13

Android Activity 回传值的相关文章

Android Activity间传值

Android中不同的Activity之间的传值方式(Main为当前Activity,Login为目标Activity) 1.使用Intent Intent intent = new Intent(Main.this, Login.class); intent.putExtra("loginName", "rubekid"); 2.使用 静态变量 Person person = new Person(); person.setName("rubekid&q

Activity回传值报错:Failure delivering result ResultInfo{who=null,request=7,result = 0,data=null}

Activity  A   -----值------->  Activity  B   -----值----->  Activity  A 场景:当A跳转到B,再从B直接点击返回按钮时,报错. package com.itheima.smsSender; import android.os.Bundle; import android.telephony.gsm.SmsManager; import android.view.View; import android.view.View.OnC

Android activity之间传值

当对Android有一些了解后,不难发现,Android程序UI框架接近于Web页面的概念.每一个用于呈现页面的组件,Activity,都是彼此独立的,它们通过系统核心来调度整合,彼此之间的通过Intent机制来串联. 每一种架构都会有其利弊,Android当然也不能超然脱俗.由于Activity之间的松耦合关系,使得其复用能力特别的出色,Mash-Up方式可以有效的提高开发效率.但另一方面,由于Activity过于的独立,它们之间的数据共享,成为一个麻烦的事情. 一 基于消息的传输 最标准的A

Android activity之间传值关键性代码

从当前activity中获取et 表单中的值,并跳转到myactivity.java所绑定的xml布局文件上. private EditText et; Intent intent=new Intent(MainActivity.this,myactivity.class); String str=et.getText().toString(); intent.putExtra("name", str); startActivity(intent); myactivity.java所绑

Android 组件系列-----Activity的传值和回传值

在这篇随笔里将讲解Activity的传值和回传值. 一.通过startActivity来进行Activity的传值 在Android中,如果我们要通过一个Activity来启动另一个Activity,可以使用 startActivity(Intent intent)方法来传入一个Intent对象,这个Intent对象我们可以精确的指定我们需要跳转的Activity上,或者通过Intent对象来指定我们要完成的一个action操作. ①.通过setClass方法来指定我们要跳转的Activity

Android 两个Activity间的传值与回传值

MainActivity.java Intent intent = new Intent(); intent.putExtra("message", "传到SecondActivity的值"); intent.setClass(MainActivity.this, SecondActivity.class); /*  * 如果希望启动另一个Activity,并且希望有返回值,则需要使用startActivityForResult这个方法,  * 第一个参数是Inte

Activity间传值的方式

原文地址:https://blog.csdn.net/qq_33748378/article/details/53023036 Activity间的跳转: 要了解Activity间的传值,首先得知道actvivity是怎么跳转的.Activity间的跳转有隐式和显式两种方式,代码如下: // 显式 Intent intent = new Intent(this,SecondActivity.class); /* Intent intent = new Intent(); intent.setCl

Android Activity的跳转:普通跳转(显式跳转,隐式跳转)和传值跳转

Android Activity的跳转 1.普通跳转 @显式跳转 startActivity(new Instent(Activity.this,Activity2.class)); 注意:a--->b--->a(a跳转到b,按下back,回到a) 从一个Activity1跳转到另个Activity2,再由这个Activity2返回前面的Activity1,Activity的所执行的方法为:onCreate(a)---onStart(a)---onResume(a)---onPause(a)-

Android中点击按钮启动另一个Activity以及Activity之间传值

场景 点击第一个Activity中的按钮,启动第二个Activity,关闭第二个Activity,返回到第一个Activity. 在第一个Activity中给第二个Activity传递值,第二个Activity中获取并显示. 打开第二个Activity Activity传值 注: 博客:https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 启动另一个Activity 在第一个Activity中