在多个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