返回数据给上一个活动

返回数据给上一个活动

既然可以传递数据给下一个活动,那么能不能够返回数据给上一个活动呢?答案是肯定的。不过不同的是,返回上一个活动只需要按一下Back键就可以了,并没有一个用于启动活动的Intent来传递数据。通过查阅文档你会发现,Activity中还有一个startActivityForResult()方法也是用来启动活动的,但这个方法期望在活动销毁的时候能够返回一个结果给上一个活动。毫无疑问,这就是我们所需要的。

startActivityForResult(方法接收两个参数,第一个参数还是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源。我们还是来实战一下,在MainActivity中有一个btn1按钮,并设置好了点击监听,此时点击btn1按钮会跳转到SecondActivity界面,并且还会发送一个请求码1.

btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,SecondActivity.class);
                startActivityForResult(intent,1);
            }
        });



    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        switch (requestCode) {
            case 1:
                    String value = data.getStringExtra("key");
                    Log.e("MainActivity", value);
                break;
            default:
        }
    }

activity_second.xml中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="跳转入MainActivity活动"
        android:textAllCaps="false" />


</LinearLayout>

SecondActivity.java中:

package com.example.administrator.activitydemo;

import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {
    private Button btn2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        initializeView();//初始化UI控件
    }

    private void initializeView() {
        btn2 = (Button) findViewById(R.id.btn2);
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.putExtra("key", "Hello MainActivity");
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }


}

下面我们来分析一下

1.首先是在MainActivity中点击btn1--------->跳转进入SecondActivity

2.再在SecondActivity中点击btn2-------->MainActivity

在MainActivity中发送了一个intent和请求码1给SecondActivity

SecondActivity中使用了一个setResult()方法,第一个参数是

RESULT_OK,第二个参数是SecondActivity中新实例出来的一个intent。而这个intent中通过putExtra()方法传递了一个键值

最后我们通过在MainActivity.java中重写了一个onActivityResult()方法,然后又获取了intent种传递过来的值,并且用Log打印了出来,效果图如下:

www.zeeklog.com  - 返回数据给上一个活动
www.zeeklog.com  - 返回数据给上一个活动
www.zeeklog.com  - 返回数据给上一个活动

最后,如果你希望在SecondActivity中按下Back按钮也实现同样的功能,可以在SecondActivity.java文件中这样重写一个onBackPressed()方法,这个方法是Android系统自动监听用户点击Back按钮时自动调用的函数,如果不明白什么是回调函数可以百度下哟。

 @Override
    public void onBackPressed() {
        Intent intent=new Intent();
        intent.putExtra("key","Hello MainActivity");
        setResult(RESULT_OK,intent);
        finish();
    }