开发实际项目的时候,碰到Activit向上一个Activity返回数据的时候必须用startActivityForResult()这个方法!!不要自己臆想其他的方法,比如说用共享参数在活动2中保存,然后在活动1中取出,这种方式虽能实现功能,但存在巨大的隐患,甚至你会因此丢掉工作!因为共享参数存放的数据在你的ROM中,startActivityForResult()这个方法数据是存放到RAM中的,RAM的读取速度是远远高于ROM的,现在网络越来越快,当网络的传输速度大于你ROM的读取速度的时候,就会出问题了!
分三步:
1 活动1跳转到活动2,使用startActivityForResult()启动
Intent mIntent=new Intent(MainActivity.this,Main2Activity.class);
startActivityForResult(mIntent,1);//请求参数设为1
2 活动2返回数据到活动1使用setResult()方法
Intent mIntent=new Intent();//没有任何参数(意图),只是用来传递数据
mIntent.putExtra("2_data_return","我是Activity2的数据");
setResult(RESULT_OK,mIntent);
finish();
3 活动1使用onActivityResult()取出活动2中的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 1:
if(resultCode==RESULT_OK){
String dataStringExtra2= data.getStringExtra("2_data_return");
Log.e("1", "run:---------> "+ dataStringExtra2);
}
}
}
整体代码如下:
Activity1中
public class MainActivity extends AppCompatActivity {
private RelativeLayout mActivityMain;
private Button mBt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBt1 = (Button) findViewById(R.id.bt1);
click();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 1:
if(resultCode==RESULT_OK){
String dataStringExtra2= data.getStringExtra("2_data_return");
Log.e("1", "run:---------> "+ dataStringExtra2);
}
}
}
public void click(){
mBt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View mView) {
Intent mIntent=new Intent(MainActivity.this,Main2Activity.class);
startActivityForResult(mIntent,1);//请求参数设为1
}
});
}
// public void click(){
// mTv1.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View mView) {
// Intent mIntent=new Intent("ACTION_START");
// mIntent.addCategory("MY_CATEGORY");
// startActivity(mIntent);
//
// }
// });
// }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this, "Add", Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(this, "Remove", Toast.LENGTH_SHORT).show();
}
return true;
}
}
Activity2中
public class Main2Activity extends AppCompatActivity {
private Button mBt2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
mBt2 = (Button) findViewById(R.id.bt2);
click();
}
public void click() {
mBt2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View mView) {
Intent mIntent=new Intent();//没有任何参数(意图),只是用来传递数据
mIntent.putExtra("2_data_return","我是Activity2的数据");
setResult(RESULT_OK,mIntent);
finish();
}
});
}
}