一. putExtra()方法的作用
- 先来说下intent的作用,intent是Android程序中各组件之间进行交互的一种重要方式,一般被用来启动活动、启动服务以及发送广播等;intent在启动Activity的时候可以传递数据,比如说给另一个Activity传递数据,那么活动与活动之间是怎样进行数据传递的呢?
- 这时候就需要用到putExtra()方法。intent中提供一系列的putExtra()方法的重载,可以把想要传递的数据暂存在intent中,当另一个活动启动后,再把这些数据从intent缓存中取出即可。
- putExtra("A", B)方法中,AB为键值对,第一个参数为键名,第二个参数为键对应的值,这个值才是真正要传递的数据。举个栗子:
String data = "Hello World";
...
intent.putExtra("extra_data", data);
既然数据是传递给另一个Activity的,那另一个Activity怎么获取这个数据(键值对)呢?这个时候就需要用到get×××Extra()方法,那“×××”又是啥意思呢?其实它是数值类型。比如上例中的键值对("extra_data", data),data的类型是String,那么获取这组数据的方法就是getStringExtra()。同理,还有getIntExtra()、getBooleanExtra()等方法。
二. 实战练习
光说不练假把式,我们学习新知识点的时候都应该多敲代码多练习,以加深记忆!下面我就写一个栗子: (注:环境为Android Studio 4.0)
这个栗子的思路就是在第一个活动(MainActivity)里新建2个文本输入框EditText,然后再新建一个Button,添加点击事件,当点击Button时,MainActivity中的2个TextView中输入的内容同时在第二个活动SecondActivity中的TextView中显示出来。
1. 新建第一个Activity:MainActivity
以下是MainActivity的源码:
public class MainActivity extends AppCompatActivity {
//声明控件对象
private EditText editText1;
private EditText editText2;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件的对象
editText1 = findViewById(R.id.edit_1);
editText2 = findViewById(R.id.edit_2);
button = findViewById(R.id.button);
//为Button绑定监听器
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取文本输入框中的内容
String editTextStr1 = editText1.getText().toString();
String editTextStr2 = editText2.getText().toString();
//创建intent对象,参数分别为上下文、要跳转的Activity类
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
//将要传递的值附加到Intent对象中暂时保存
intent.putExtra("extra_data1", editTextStr1);
intent.putExtra("extra_data2", editTextStr2);
//启动该intent对象,实现Activity跳转
startActivity(intent);
}
});
}
}
MainActivity对应的布局文件为activity_main.xml,使用简单的LinearLayout线性布局,控件排布为从上到下依次为文本输入框、文本输入框、按钮。其源码为:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/edit_1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/edit_2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"
android:textAllCaps="false" />
</LinearLayout>
2. 新建第二个Activity:SecondActivity
public class SecondActivity extends AppCompatActivity {
//声明TextView对象
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//获取TextView控件对象
textView = findViewById(R.id.text_view);
//获取启动该Activity的Intent对象
Intent intent = getIntent();
//获取Intent中暂存的数据
String data1 = intent.getStringExtra("extra_data1");
String data2 = intent.getStringExtra("extra_data2");
//将MainActivity中两个输入框的输入的内容一同在SecondActivity的TextView控件中显示出来
textView.setText(data1 + " " + data2);
}
}
SecondActivity的布局文件activity_second.xml比较简单,就是一个简单的文本显示控件TextView,就不贴代码了。
三. 运行结果
- 点击AndroidStudio的run按钮运行程序,程序首先进入MainActivity,在Android模拟器中运行的结果如下图所示:
- 在两个文本输入框中依次输入“Hello world!”、“Awesome Awesome!”,点击当前UI中的Button按钮,程序跳转到SecondActivity,运行的结果如下图所示:
- 这样,我们就通过intent.putExtra()方法将一个活动的数据传递到了第二个活动中,并显示出来。
(写在最后:请大神勿喷,这是本人的自学笔记,旨在巩固自学过程中的学习效果,如果能给Android小白带来一点点帮助,就再好不过了)