使用intent返回数据给上一个活动实例讲解(使用onBackPressed()返回数据给上一个活动问题解决)

1.在FirstActivity的布局中添加控件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.firstactivitya.FirstActivity">

    <Button
        android:id="@+id/goto_second_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="to SecondActivity"/>

</LinearLayout>
2.修改FirstActivity中的代码:
public class FirstActivity extends AppCompatActivity {

    private Button gotoSecondBtn;
    private static  final String TAG = "FirstActivity";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        gotoSecondBtn = findViewById(R.id.goto_second_btn);
        //对按钮进行监听
        gotoSecondBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //使用intent进行跳转
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                //启动跳转,这里使用startActivityForResult()方法,这个方法会在跳转到的活动页面销毁时,返回一个数据给上一个活动
                /**
                 * param1:intent
                 * param2:请求码,用于回调时判断数据的来源
                 */
                startActivityForResult(intent, 1);
            }
        });
    }
}
3.在SecondActivity中发送消息:
public class SecondActivity extends AppCompatActivity {

    private Button secondBtn;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        secondBtn = findViewById(R.id.second_btn);
        secondBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //创建Intent对象
                Intent intent = new Intent();
                //通过put()以键值对的方式赋值
                intent.putExtra("hi", "hi FirstActivity");
                //通过setResult()方法向上一个活动返回结果 param1:处理结果代号
                setResult(1, intent);
                finish();
            }
        });
    }
    }
4.最后在FirstActivity复写onActivityResult()接收消息:
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.e(TAG, "onActivityResult1: "+data );
        switch (resultCode) {
            //下面的1为startActivityForResult(intent, 1);中的1
            case 1:
                //这里的1为setResult(1, intent);中的1
                if (resultCode==1){
                    String str = data.getStringExtra("hello");
                    Log.e(TAG, "onActivityResult2: "+str );
                    String str2 = data.getStringExtra("hi");
                    Log.e(TAG, "onActivityResult3: "+str2 );
                }
                break;


            default:
                break;

        }
    }
}
OK,这样就可以实现传值了,不过你可能又要问了,String str = data.getStringExtra(“hello”);从哪来的,这是我下面要写的代码,在SecondActivity中添加:
    @Override
    public void onBackPressed() {
//        super.onBackPressed();
        Intent intent = new Intent();
        intent.putExtra("hello","Hello FirstActivity");
        setResult(1,intent);
        finish();
    }
可以实现不用点击按钮而是点击返回键就可以返回数据,仔细看我的代码,可以看到,我将// super.onBackPressed();注释掉了,这是因为如果不注释,他就会调用onBackPressed()默认的处理方法,就不能实现返回数据给上一个活动了,这是我犯的错误,当然可以使用以前的方法对返回按钮进行监听:
 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent intent = new Intent();
            intent.putExtra("hello", "Hello FirstActivity");
            setResult(1, intent);
            finish();
        }
        return super.onKeyDown(keyCode, event);

    }

最后可以看一下运行效果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/shaochen2015821426/article/details/80155457
今日推荐