Android Activity 回傳值

來源:互聯網
上載者:User

標籤: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 回傳值

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.