在多個Activity中回傳值(startActivityForResult())


業務邏輯:

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

 效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM