返回数据给上一个活动
既然可以传递数据给下一个活动,那么能不能够返回数据给上一个活动呢?答案是肯定的。不过不同的是,返回上一个活动只需要按一下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打印了出来,效果图如下:
最后,如果你希望在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();
}