在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的布局文件。

Empty Activity
Empty Activity

在生成的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退出。
    findviewbyme
    findviewbyme
  • 点击MainActivity中的activity_main,右键,Generate,找到刚刚安装的findviewbyme,打开后如下图,选中四个控件后点击ok,即可自动生成以下代码。
    FindViewByMe
    FindViewByMe
//声明四个控件
    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);
    }
  • 完成效果
    RPReplay.gif
    RPReplay.gif

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");

完整代码下载

[hide] [x-btn type='secondary' icon='' href='https://cloud.eck.ink/#s/8EMabINQ' content='Activity中数据传递.rar' /] 密码:bOgXp [/hide]