码迷,mamicode.com
首页 > 移动开发 > 详细

Android Activity 回传值

时间:2014-11-21 23:10:31      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   io   ar   color   sp   for   数据   

记录一下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来表示状态。

Android Activity 回传值

标签:android   style   blog   io   ar   color   sp   for   数据   

原文地址:http://www.cnblogs.com/weiyuanzhu/p/4113932.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!