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(); } }); } }