Intent返回数据


第一步:新建一个项目


我们把主项目的活动叫A活动,在A活动中准备一个字符串用startActivityForResult()跳转。
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button b1=(Button)findViewById(R.id.button1);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,
                        Main2Activity.class);
                intent.putExtra("aaaa","中华人民共和国");//传一个字符串
                startActivityForResult(intent,1); //跳转。第二个参数1是个自定义的请求编号
            }
        });
    }
你看它不再是startActivity()进行跳转,而是使用startActivityForResult(intent,1);进行跳转,
startActivityForResult(intent,1)中的第二个参数是请求码,这个请求码是你自己设定的,把它理解为一个请求编号,这个编号是自己设定的。

第二步:


新建另一个活动,比如B活动,在B活动中用setResult()转送回去。
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        final TextView tv1=(TextView)findViewById(R.id.textView1);
        Intent intent=getIntent();
        String aaaa=intent.getStringExtra("aaaa");//对方用aaaa传过来,我用aaaa去接
        tv1.setText(aaaa);

        final Button b1=(Button)findViewById(R.id.button1);
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();//这里虽然是new一个,但其实它只是装数据用的。
                intent.putExtra("bbbb", "你也好!你在做什么?");//这是传回去的
                setResult(RESULT_OK, intent);  //RESULT_OK是回答码。
                finish();
            }
        });
    }
第一个参数用于向上一个活动返回处理结果,一般只是使用RESULT_OK 或 RESULT_CANCLED这两个值;
第二个参数把带有数据的Intent传递过去;
然后调用了finish()方法来销毁当前活动。

第三步:

在A活动中要用重载函数onActivityResult()去接收,而不是回传到onCreate()之中
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case 1:
                if(resultCode == RESULT_OK){
                    String returnedData = data.getStringExtra("bbbb");
                    Toast.makeText(this, returnedData, Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }
requestCode是请求代码,这个请求代码是与A活动中的请求代码是相同的。
resultCode是回答代码,这个回答代码一般是RESULT_OK。
data 是对方传过来的数据放在data之中,你要得到对方回答的数据,就必须从data中取出来。

此时运行就有效果了。

第四步:

如果你不想设置专用的回传按钮,也可以这样解决:直接用安卓手机的back键。

但此时,就要把回传代码写到onBackPressed()之中,因为你按手机上的后退键,它会执行这个方法。用重载的方法可以得到这个函数。

    @Override
    public void onBackPressed() {
        Intent it=new Intent();
        it.putExtra("bbbb","新冠病毒在流行!");
        setResult(RESULT_OK,it);
        super.onBackPressed();
        return ;
    }

下面是补充资料:用后退键回传数据会出现的问题:

A活动里得不到B活动传过来的值,是什么原因呢?

代码写错了,应该像我上面那样写,不应该像下面这样写:

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent it=new Intent();
        it.putExtra("bbbb","新冠病毒在流行!");
        setResult(RESULT_OK,it);
        finish();
    }

扫描二维码关注公众号,回复: 9559701 查看本文章

因为这样写,它执行super.onBackPressed()时,它又回到了BACK键调用了,它会先执行finish(),这样B活动的resultCode码又被设置为RESULT_CANCELED了,这样A活动也就不会返回任何数据了。


关于后退键执行onBackPressed()得不到数据这个问题,后来查到了如下网址上的资料:
https://www.cnblogs.com/qiluboy/p/5308310.html

它的内容是:
安卓中onBackPressed ()方法的使用
一、onBackPressed()方法的解释
这个方法放在
void android.app.Activity.onBackPressed()
在安卓API中它是这样解释的:
public void onBackPressed ()
Added in API level 5
Called when the activity has detected the user's press of the back key. The default implementation simply finishes the current activity, but you can override this to do whatever you want.

理解就是:当用户在按这个键的时候,会调用这个方法。

这是Android 2.0开始多出了一种新的方法,对于Activity 可以单独获取Back键的按下事件,直接重写onBackPressed方法即可。

二、onBackPressed()方法的使用

public void onBackPressed() {
        Intent intent=new Intent();
        intent.putExtra("data_return", "相信自己");
        setResult(RESULT_OK, intent);
        super.onBackPressed();<br>                return;
      }
大家注意:该方法仅适用于2.0或更新版的sdk

关于这个return我也不怎么清楚,我查了很多资料,都说用到return但是都不清楚用return有什么作用。希望大家可以去搜集更多的资料。我试了试不用return 程序也是可以运行的。

此外,给大家说一下back键和home键的区别:

back键
Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来, 销毁当前Activity。当此Activity又被其它Activity启动起来的时候,会重新调用OnCreate()方法进行创建,当栈中所有 Activity都弹出结束后,应用也就随之结束了.如果说程序中存在service之类的,则可以在恰当的位置监听处理下也就可以了.

home键
Android程序的隐藏,当你按下手机的Home键的时候,系统会默认调用程序栈中最上层Activity的stop()方法,然后整个应用程序都会被 隐藏起来,当你再次点击手机桌面上应用程序图标时,系统会调用最上层Activity的OnResume()方法,此时不会重新打开程序,而是直接进入, 会直接显示程序栈中最上层的Activity。

back键默认把当前Activity给finish,home键只是把Activity给onStop.

实现按Home键时隐藏程序的效果:
1:Android 2.0之前需要监听按键事件,进行判断是不是按下了back键
2:Android 2.0之后系统提供了一个onBackPressed()方法,这个方法就是专门用来监听back键事件的,所以只需重写onBackPressed()方法即可


public void onBackPressed() {
        // super.onBackPressed();这句话一定要注销,不然又去调用默认的back处理方式了
        Intent intent=new Intent();
        intent.putExtra("data_return", "相信自己");
        setResult(RESULT_OK, intent);
        
      }

发布了72 篇原创文章 · 获赞 79 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/jintingbo/article/details/104642417