业务逻辑:
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(); } }