業務邏輯:
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(); } }