Android编程学习笔记 之 使用Intent实现页面跳转

Activity的页面跳转有两种,一种是有返回数据的,一种是没有返回数据的。


①没有返回数据的跳转:

我们从Activity A中使用startActivity(intent)启动了Activity B,然后调用finish()结束Activity B返回Activity A。

A可以传递数据给B,但是B不能传递数据给A。

Android编程学习笔记 之 使用Intent实现页面跳转_第1张图片

先上代码

noResultButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent();
        intent.setClass(MainActivity.this, NextActivity.class);
        //上面两句和Intent intent = new Intent(MainActivity.this, NextActivity.class)等价
       
        //intent.putExtra("key", "无返回值的跳转");//也可以用Bundle存放数据
        Bundle bundle = new Bundle();
        bundle.putString("key", "无返回值的跳转");
        intent.putExtras(bundle);//注意putExtras()和putExtra()的区别

        startActivity(intent);//跳转页面
       }
    });

这样intent就带着一个Bundle数据包从A到达了B,现在我们要在B里面把Bundle数据包解开

    String msg = getIntent().getStringExtra("key");
    getText.setText(msg);
通过getIntent方法获得Intent对象,然后通过键值key获得数据。

这样就完成了第一种跳转,无返回值的跳转。


②有返回数据的跳转:

我们从Activity A中使用startActivityForResult(intent, requestCode)启动了Activity B,然后调用setResult()设置返回值,

再用finish()结束Activity B返回Activity A,A会调用onActivityResult()方法获得B回传的数据

A可以传递数据给B,但是B也能回传数据给A。

Android编程学习笔记 之 使用Intent实现页面跳转_第2张图片

先上代码,在Activity A中

hasResultButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent();
        intent.setClass(MainActivity.this, NextActivity.class);
        intent.putExtra("key", "有返回值的跳转");//带着键值为key的数据包跳转
        startActivityForResult(intent, 1);//注意这里的1,代表的是请求方的标志
       }
   });

startActivityForResult(Intent intent, int requestCode)这个方法中,intent和第一种用法相同,传递的是数据包。

但是后面多了个requestCode,意思是请求的标志,就好像是邮政编码一样,用来检测是谁发送出去的数据包。

之后会解释requestCode的用法。


那么B获得了A的数据包,想要返回一个值,比如“我收到你的邮件了!”,在Activity B中

returnButton.setOnClickListener(new View.OnClickListener() {
    @Override
        public void onClick(View view) {
        Intent intent = new Intent();
        intent.putExtra("key", "获得第二个Activity传来的数据");//想要返回给A的数据
        setResult(2, intent);//注意这里的2,代表的是返回方的标志
        finish();//结束Activity B
       }
    });
这里的setResult( int resultCode, Intent intent)这个方法中,intent不用再说了吧,传递的是数据包。

resultCode,这个和requestCode不同,是返回方的标志,就好像B收到了A的邮件,要告诉A我收到了!

也是像邮政编码一样,不过这次表示的是收件方,用来检测是谁返回的数据包。

之后会解释resultCode的用法。


返回去之后,我们再来看Activity A,Activity中有一个方法onActivityResult(int requestCode, int resultCode, Intent data)

看到是不是很熟悉?里面有我们之前没解释完的requestCode和resultCode

还是上代码说话,在Activity A中

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 1 && resultCode == 2) {
            resultText.setText(data.getStringExtra("key"));
        }
    }

看到1和2是不是很熟悉?就是检测是不是A发出去,B返回来。

试想如果A中有100个button发出去,然后B中有200个Button返回来,100*200=20000种结果。

我们就是通过requestCode和resultCode来辨别是谁发出去,谁返回来的,产生多种结果。

你可能感兴趣的:(android,Activity)