android中從A activity 打開B activity 操作之后返回A activity,並且A activity狀態改變就要用到刷新
我就介紹一下我開發中最常用的方法
引用函數 setResult和 onActivityResult處理機制
實現原理,在第二個Activity的返回事件中返回數據,第一個Activity中重構onActivityResult方法,在重構該方法的事件中,感覺返回的數據,做出不同的處理。以達到自動更新第一個Activity的效應。詳細情況參考如下的介紹。當前兩個activity,MainAcivity和SecondActivity;
1 //A MainAcivity的重要代碼: 2 public void onClick(View v) { 3 Intent intent = new Intent(); 4 intent.setClass(MainActivity.this, SecondActivity.class); 5 Bundle bundle = new Bundle(); 6 Log.v("android.abc", "!!!!!"+MainActivity.this.toString()); 7 bundle.putString("uid", MainActivity.this.toString()); 8 intent.putExtras(bundle); 9 startActivityForResult(intent,GET_CODE); 10 } 11 12 //B.SecondActivity中,在OnClickListener中 13 findViewById(R.id.button).setOnClickListener(new View.OnClickListener() 14 { 15 @Override 16 public void onClick(View v) 17 { 18 setResult(RESULT_OK,(new Intent()).setAction(uid)); 19 finish(); 20 } 21 }); 22 23 //B.在MainActivity中,重寫onActivityResult方法; 24 @Override 25 protected void onActivityResult(int requestCode, int resultCode, Intent data) 26 { 27 if(requestCode == GET_CODE) 28 { 29 if(resultCode == RESULT_CANCELED) 30 { 31 text2.setText("點擊了返回"); 32 } 33 else 34 { 35 if (data != null) 36 { 37 text2.setText("得到第二個activity返回的結果:\n"+data.getAction()); 38 } 39 } 40 } 41 }
其中static final private int GET_CODE = 0;是我自定義的常量,用來區分當前返回的是哪個activity的結果;下面是類SecondActivity的代碼:
public class SecondActivity extends Activity{ String uid; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); Bundle bundle = this.getIntent().getExtras(); if (bundle != null) { uid = bundle.getString("uid"); } findViewById(R.id.button).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { setResult(RESULT_OK,(new Intent()).setAction(uid)); finish(); } }); } }
