业务逻辑:
MainActivity打开A,A打开B,B把值传回MainActivity。适用在多个Activity中回传值。
实例:微信中选择国家-->省份-->城市的实现
实现方式分析:
1.第一个Activity以startActivityForResult(intent,requestCode)方式打开第二个Activity。
2.第二个Activity以startActivityForResult(intent,requestCode)方式打开第三个Activity(注意,此时不要结束第二个Activity,我们需要在onActivityResul(int,int,intent)接收第三个Activity传过来的数据,然后设置结果,传给第一个Acitivity),如果第三个Activity需要第二个Activity数据,在intent中传递给第三个Activity。
3.第三个Activity用getIntent()获得第二个Activity传过来的intent。并将自己需要传递回去的数据放入intent中,然后setResult(),finish()自己,调用第二个Activity的onActivityResul(int,int,intent)方法。
4.在第二个Activity中处理第三个Activity中传回的数据。setResult(),finish()自己,调用第一个Activity的onActivityResul(int,int,intent)方法。
5.第一个Activity的onActivityResul(int,int,intent)方法,可以接收到2个Activity传过来的数据。
代码:
public class MainActivity extends AppCompatActivity { private TextView mText; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mText = (TextView) findViewById(R.id.text);
} public void click(View view) {
Intent intent = new Intent(this,A.class);
startActivityForResult(intent,1);
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String a = data.getStringExtra("A");
String b = data.getStringExtra("B");
mText.setText(a+"+"+b);
}
}
public class A extends AppCompatActivity { private TextView mText;
private String mString; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a);
mText = (TextView) findViewById(R.id.text); mString = mText.getText().toString();
}
public void click(View view) { Intent intent = new Intent(this,B.class); intent.putExtra("A",mString); startActivityForResult(intent,1);
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { setResult(3,data);
finish();
}
}
public class B extends AppCompatActivity {
private TextView mText;
private String mString;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.b);
mText = (TextView) findViewById(R.id.text); mString = mText.getText().toString();
}
public void click(View view) {
Intent intent = getIntent();
intent.putExtra("B",mString);
setResult(2,intent);
finish();
}
}