Activity之间进行传值的方式以及Activity的回传值(补充版)

本文介绍了在Android开发中实现Activity间数据传递的各种方法,包括使用Intent进行简单传值、使用本地存储方式、回调机制、EventBus事件总线、以及通过startActivityForResult等方法实现的数据传递与返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用Intent进行Activity传值

1)使用setClass方法来制定我们要跳转的Activity
Intent intent=new Intent(this,SecondActivity.class);
intent.putExtra(key,value);
startActivity(intent);
//或者
Intent intent=new Intent();
intent.setClass(MainActivity.this,SecondActivity.class);
intent.putExtra(key,value);
startActivity(intent);
2)使用setAction方法来完成跳转Activity
Intent  intent = new Intent();
intent.setAction("com.example.android_intent.second");
intent.putExtra(key,value);
startActivity(intent);
 
注意必须在mainfest.xml文件中的SecondActivity中设置action

<activity 
            android:name="com.example.activitytest.SecondActivity"
            android:label="SecondActivity">
            <intent-filter>
                <action android:name="com.example.android_intent.second"/>
                <category android:name="android.intent.category.DEFAULT"/>//切记是default
            </intent-filter>
</activity>

2、使用本地存储SharedPreferences、SQLite、Content Provider和File进行Activity传值

3、使用回调CallBack

4、使用EventBus

5、使用startActivityForResult()、onActivityResult()、setResult()方法进行传递和返回值

一、A Activity-->B Activity=======>返回值给A Activity
1)在第一个Activity中使用startActivityForResult()方法进行跳转,使用onActivityResult()进行接收
private int REQUEST_GET_NAME=0;
@Override
    public void onClick(View view) {
//        Intent intent=new Intent();
//        intent.setClass(MainActivity.this,SecondActivity.class);
//        startActivity(intent);
        Intent intent=new Intent(this,SecondActivity.class);
        //第一个参数是Intent对象,
        //第二个requestCode指定我们的一个启动标志值,因为我们可能有多个按钮,如果都是跳转到同一个 
        //Activity对象上,
        //我们需要对其进行标志,才知道是哪个Activity对象跳转过来的。
        startActivityForResult(intent,REQUEST_GET_NAME);
-----------------------------------------------------------------------------------------
 /**
     * 所有的Activity对象的返回值都是由这个方法来接收
     * requestCode    If >= 0, this code will be returned in onActivityResult() when the activity exits.
     * @param requestCode 表示的是启动一个Activity时传过去的requestCode值
     * @param resultCode 表示的是启动后的Activity回传值时的resultCode值
     * @param data 表示的是启动后的Activity回传过来的Intent对象
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
            if(requestCode==REQUEST_GET_TIME&&resultCode==RESULT_OK){
                textView.setText(data.getStringExtra("name"));
            }
    }
2)在第二个页面中使用setResult()方法

 Intent intent=new Intent();
        intent.putExtra("name",""小明);
        setResult(RESULT_OK,intent);
        this.finish();
二、A Activity页面中多个点击事件跳转各个Activity,并相应给A Activity返回信息
1)、A Activity多个点击事件跳转对应的页面
private static final int REQUEST_GET_SEX = 1;
private static final int REQUEST_GET_NAME = 2;

binding.tvSecond.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, SecondActivity.class);//第二个页面
                startActivityForResult(intent, REQUEST_GET_SEX);
            }
        });
        binding.tvThree.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, ThreeActivity.class);//第三个页面
                startActivityForResult(intent, REQUEST_GET_NAME);
//                startActivity(intent);
            }
        });

2)接收返回值得方法
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case 1:
                if (resultCode == 1) {
                    Toast.makeText(context, "性别::" + data.getStringExtra("sex"), Toast.LENGTH_SHORT).show();
                }
                break;
            case 2:
                if (resultCode == RESULT_OK) {
                    Toast.makeText(context, "姓名::" + data.getStringExtra("name"), Toast.LENGTH_SHORT).show();
                }
                break;

        }

    }


3)对应各个页面的方法
 binding.sex.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SecondActivity.this, MainActivity.class);
                intent.putExtra("sex", "男");
                setResult(1, intent);
                finish();
            }
        });

 binding.back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ThreeActivity.this, MainActivity.class);
                intent.putExtra("name", "麻子");
                setResult(RESULT_OK, intent);//使用系统自带或者自定义resultCode都行
                finish();
            }
        });

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值