美文网首页Android栗子Android开发经验谈android成神之路
栗子——Activity的三级跳转&值的传递

栗子——Activity的三级跳转&值的传递

作者: 淡漠de人生 | 来源:发表于2016-05-26 13:05 被阅读462次

    需求分析

    从MainActivity-->BActivity-->CActivity-->MainActivity
    也就是说跳到第三个界面后跳回到第一个界面,并把值从第三个界面传到第一个界面,没错就是这个骚操作~

    栗子配图.png

    栗子惯例,先上GIF

    栗子.gif

    MainActivity.java

    public class MainActivity extends Activity {
        private Button btnOne;
        private TextView tvContentOne;
        private final int FIRST_REQUEST_CODE = 1;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            btnOne = (Button) this.findViewById(R.id.btnOne);
            tvContentOne = (TextView) this.findViewById(R.id.tvContentOne);
            btnOne.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    //跳转到第二个界面,并把值传过去
                    Intent intent = new Intent(MainActivity.this,BActivity.class);
                    intent.putExtra("One", "我是从第一个传过来的内容");
                    startActivityForResult(intent, FIRST_REQUEST_CODE);
                }
            });
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            //接受从第三个界面的返回值
            if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_FIRST_USER){
                if (data != null) {
                    tvContentOne.setText(data.getStringExtra("request"));
                }
            }
            //接受从第二个界面的返回值
            else if(requestCode==FIRST_REQUEST_CODE && resultCode==Activity.RESULT_OK){
                if (data != null) {
                    tvContentOne.setText(data.getStringExtra("request"));
                }
            }
        }
    }
    

    BActivity.java

    public class BActivity extends Activity{
        Button btnTwo;
        Button btnTwo2;
        TextView tvContentTwo;
        private final int SECOND_REQUEST_CODE = 2;
        private String text;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_b);
            btnTwo = (Button) findViewById(R.id.btnTwo);
            btnTwo2 = (Button) findViewById(R.id.btnTwo2);
            tvContentTwo = (TextView) findViewById(R.id.tvContentTwo);
            text = getIntent().getStringExtra("One");
            if(text != null){
                //设置第一个界面传过来的内容
                tvContentTwo.setText(text);
            }
            btnTwo.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    //返回第一个界面,把值传过去
                    Intent intent = new Intent();
                    intent.putExtra("request", "我是从第二个界面返回的内容");
                    setResult(Activity.RESULT_OK,intent);
                    finish();
                }
            });
            btnTwo2.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    //跳转到第三个界面,把第二个界面的内容传过去
                    Intent intent = new Intent(BActivity.this,CActivity.class);
                    intent.putExtra("Two", "我是从第二个界面传过来的内容");
                    startActivityForResult(intent, SECOND_REQUEST_CODE);
                }
            });
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            //关键的地方,接收到第三个界面传过来的值,并把值传回第一个界面,并关闭第二个界面
            if(requestCode==SECOND_REQUEST_CODE && data != null){
                if (data != null) {
                    setResult(Activity.RESULT_FIRST_USER, data);
                    finish();
                }
            }
        }
    }
    

    CActivity.java

    public class CActivity extends Activity{
        Button btnThree;
        TextView tvContentThree;
        private String text;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_c);
            btnThree = (Button) findViewById(R.id.btnThree);
            tvContentThree = (TextView) findViewById(R.id.tvContentThree);
            text = getIntent().getStringExtra("Two");
            if(text != null){
                //设置第二个界面传过来的值
                tvContentThree.setText(text);
            }
            btnThree.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    //把值传回第二个界面,由第二个界面传回第一个界面
                    Intent intent = new Intent();
                    intent.putExtra("request", "我是从第三个界面返回的内容");
                    setResult(Activity.RESULT_FIRST_USER,intent);
                    finish();
                }
            });
        }
    }
    

    总结:开发中的小技巧,希望对大家有帮助~~


    未经本人允许禁止转载,违者必究


    个人博客:WWW.FJ917.COM
    简书:www.jianshu.com/u/3d2770e6e489

    欢迎加入QQ交流群657206000点我加入
    QQ交流群:657206000

    相关文章

      网友评论

      • 胡哈哈哈::D好像给intent设置FLAG_ACTIVITY_FORWARD_RESULT也可以实现返回值从C到A的透传。那么在B启动C的时候就可以finish()
        淡漠de人生:@胡哈哈哈 互相学习,setFlags我去看看,没用过,看看能不能实现 :relaxed:
        胡哈哈哈:@淡漠de人生 :stuck_out_tongue_closed_eyes: 看错了
        淡漠de人生:@胡哈哈哈 “在B启动C的时候就可以finish()”,那么你在C界面按下返回键的时候,你的B界面就没了哦

      本文标题:栗子——Activity的三级跳转&值的传递

      本文链接:https://www.haomeiwen.com/subject/zifxdttx.html