在Android Studio开发中,经常需要在Activity中进行数据传递,这里就需要使用Intent来实现Activity之间数据的传递(往期文章:『Android Studio』利用Intent实现Activity的跳转)。
运行环境
- Windows 10
- Android Studio Arctic Fox (2020.3.1)
- jdk1.7.0_67
putExtra方法
putExtra("A", B)方法中,AB为键值对,第一个参数为键名,第二个参数为键对应的值。
一般单值的传递使用 putExtra(),getStringExtra()
例如MainActivity通过putExtra()将数据传递给SecondActivity;SecondActivity又通过get···Extra()获取数据(···
为对应putExtra的数据类型,比如getStringExtra(),getIntExtra()等)。
新建项目
新建一个Android项目,在activity_main.xml布局文件中我们添加三个Editview,用作数据的输入框,id分别命名为et1,et2,et3;再添加一个button按钮,用作提交。
<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="账号"
android:textSize="16sp" />
<EditText
android:id="@+id/et2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="密码"
android:textSize="16sp" />
<EditText
android:id="@+id/et3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="邮箱"
android:textSize="16sp" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提交"
android:textSize="16sp" />
新建Activity
在项目目录下新建一个Empty Activity,命名为SecondActivity.java,会自动生成一个activity.second.xml的布局文件。
在生成的activity.second.xml中添加一个TextView控件,命名为tv;在SecondActivity中声明该控件。
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"/>
- 依次点击右上角Files-Settings-Plugins,搜索findviewbyme,点击install,安装完成后点OK退出。
- 点击MainActivity中的activity_main,右键,Generate,找到刚刚安装的findviewbyme,打开后如下图,选中四个控件后点击ok,即可自动生成以下代码。
//声明四个控件
private EditText et;
private EditText et2;
private EditText et3;
private Button btn;
...
//获取布局文件中的EditText和Button分别赋值给声明的et,et2,et3,btn类型的变量
et = (EditText) findViewById(R.id.et);
et2 = (EditText) findViewById(R.id.et2);
et3 = (EditText) findViewById(R.id.et3);
btn = (Button) findViewById(R.id.btn);
设置监听
对Button按钮设置监听
由于上一篇文章已经介绍过该内容,所以这里我略写一下。
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name=et.getText().toString();
String password=et2.getText().toString();
String mail=et3.getText().toString();
Intent it=new Intent(MainActivity.this,SecondActivity.class);
it.putExtra("username",name);
it.putExtra("password",password);
it.putExtra("mail",mail);
startActivity(it);
}
});
getText().toString()
是获取编辑文本框中输入的数据转化成字符串
数据获取
数据获取
在SecondActivity中添加以下代码
private void initView() {
tv =(TextView)findViewById(R.id.tv);
Intent it=getIntent();
//从MainActivity中获取username,password,mail
String name=it.getStringExtra("username");
String password=it.getStringExtra("password");
String mail=it.getStringExtra("mail");
tv.setText("账户:"+name+"密码:"+password+"邮箱:"+mail);
}
- 完成效果
bundle方法
bundle方法适用于多值的传递,使用方法与putExtra类似。
在前面写的代码基础上我们只需要更改一下代码即可。
将
//MainActivity
it.putExtra("username",name);
it.putExtra("password","hjnu");
it.putExtra("nickName","Jack");
//SecondActivity
String name=it.getStringExtra("username");
String password=it.getStringExtra("password");
String mail=it.getStringExtra("mail");
替换为
//MainActivity
Bundle bundle=new Bundle();
bundle.putString("username",name);
bundle.putString("password","hjnu");
bundle.putString("mail","123@qq.com");
it.putExtras(bundle);
//SecondActivity
Bundle bundle=it.getExtras();
String name=bundle.getString("username");
String password=bundle.getString("password");
String mail=bundle.getString("mail");
666看
好好好好好
好好好好好