Intent的使用和Activity中的数据传递

来源:互联网 发布:js 获得div的高度 编辑:程序博客网 时间:2024/05/16 09:21

Intent寻找目标组件的方式有两种:显式意图、隐式意图
1、显式意图:
显示意图启动Activity:

        //创建Intent对象,启动Activity02        Intent intent = new Intent(this, Main2Activity.class);        //开启Activity         startActivity(intent);

通过Intent的构造方法来创建Intent对象。构造方法中接受两个参数,第一个参数Content要求提供一个启动Activity的上下文,第二个参数Class则是指定要启动的目标Activity。
2、隐式意图:
没有明确指定组件名的Intent称为隐式意图。
在AndroidManifest.xml中配置:

 <activity android:name=".MainActivity">            <intent-filter>                <action android:name="xxxx" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>

使用隐式意图开启Activity

        Intent intent = new Intent();        //开启Activity        intent.setAction("xxxx");        startActivity(intent);

上述代码中,标签指明了当前Activity可以响应的动作”xxxx”,而则包含了一些类别信息,只有和中的内容同时匹配时,Activity才会被开启。
Intent指定了setAction(“xxxx”);这个动作,但没有指定,而配置的是一种默认的,在调用startActivity()方法时,会自动将这个category添加到Intent中。

Activity中的数据传递:
activity_main.xml:

        <EditText            android:id="@+id/et_password"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:inputType="textPassword"            android:textSize="14dp" />

Activity01.java:

//获取控件对象EditText et_password = (EditText) findViewById(R.id.et_password);......//创建Intent对象,启动Activity02Intent intent = new Intent(this, Activity02.class);//将数据存入Intent对象intent.putExtra("password", et_password.getText().toString().trim());startActivity(intent);

使用Intent传递数据只需要调用putExtra()方法,将想要存储的数据存在Intent中。putExtra()方法中第一个参数接收的是key,第二个参数接收的是value。

activity_main02.xml:

<TextView        android:id="@+id/tv_password"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:gravity="center"        android:layout_marginTop="10dp"        android:textSize="20dp" />

Activity02.java:

//获取Intent对象Intent intent=getIntent();String password = intent.getStringExtra("password");//获取控件对象TextView tv_password =(TextView)findViewById(R.id.tv_password);//将文本框的内容设置为获取的Intent的内容 tv_password.setText(password);

getIntent()方法获取到Intent对象,然后通过该对象的getStringExtra()方法获取相应的内容。getStringExtra(String str)方法传入的参数必须是Activity01中intent.putExtra()方法中传入的key,否则会返回null。

下面我们就演示一个案例:
用户注册案例:
基本布局如下:

这里写图片描述

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <LinearLayout        android:id="@+id/regist_username"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_marginTop="22dp"        android:orientation="horizontal" >        <TextView            android:layout_width="80dp"            android:layout_height="wrap_content"            android:gravity="right"            android:paddingRight="5dp"            android:text="用户名 :" />        <EditText            android:id="@+id/et_name"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:hint="请输入您的用户名"            android:textSize="14dp" />    </LinearLayout>    <LinearLayout        android:id="@+id/regist_password"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@+id/regist_username"        android:layout_centerHorizontal="true"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_marginTop="5dp"        android:orientation="horizontal" >        <TextView            android:layout_width="80dp"            android:layout_height="wrap_content"            android:gravity="right"            android:paddingRight="5dp"            android:text="密    码 :" />        <EditText            android:id="@+id/et_password"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:hint="请输入您的密码"            android:inputType="textPassword"            android:textSize="14dp" />    </LinearLayout>    <RadioGroup        android:id="@+id/radioGroup"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/regist_password"        android:layout_marginLeft="30dp"        android:contentDescription="性别"        android:orientation="horizontal" >        <RadioButton            android:id="@+id/radioMale"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:checked="true"            android:text="男" >        </RadioButton>        <RadioButton            android:id="@+id/radioFemale"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="女" />    </RadioGroup>    <Button        android:id="@+id/btn_send"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/radioGroup"        android:layout_centerHorizontal="true"        android:layout_marginTop="24dp"        android:text="提交用户信息" /></RelativeLayout>

布局如下图:
这里写图片描述

activity_main2.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <TextView        android:id="@+id/tv_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:gravity="center"        android:layout_marginTop="10dp"        android:textSize="20dp" />    <TextView        android:id="@+id/tv_password"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:gravity="center"        android:layout_marginTop="10dp"        android:textSize="20dp" />    <TextView        android:id="@+id/tv_sex"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:gravity="center"        android:layout_marginTop="10dp"        android:textSize="20dp" /></LinearLayout>

MainActivity:

package com.example.thinkpad.myapplication;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.RadioButton;public class MainActivity extends AppCompatActivity {    private Button btn_send;    private EditText et_name;    private RadioButton manRadio;    private RadioButton womanRadio;    private EditText et_password;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        et_name = (EditText) findViewById(R.id.et_name);        et_password = (EditText) findViewById(R.id.et_password);        btn_send = (Button) findViewById(R.id.btn_send);        manRadio = (RadioButton) findViewById(R.id.radioMale);        womanRadio = (RadioButton) findViewById(R.id.radioFemale);        //点击发送按钮进行数据传递        btn_send.setOnClickListener(new View.OnClickListener() {            public void onClick(View v) {                passDate();            }        });    }    //传递数据    public void passDate() {        //创建Intent对象,启动Activity02        Intent intent = new Intent(this, Main2Activity.class);        //将数据存入Intent对象        intent.putExtra("name", et_name.getText().toString().trim());        intent.putExtra("password", et_password.getText().toString().trim());        String str = "";        if (manRadio.isChecked()) {            str = "男";        } else if (womanRadio.isChecked()) {            str = "女";        }        intent.putExtra("sex", str);        startActivity(intent);    }}

Main2Activity:

package com.example.thinkpad.myapplication;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;public class Main2Activity extends AppCompatActivity {    private TextView tv_name;    private TextView tv_password;    private TextView tv_sex;    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main2);        Intent intent = getIntent();        String name = intent.getStringExtra("name");        String password = intent.getStringExtra("password");        String sex = intent.getStringExtra("sex");        tv_name = (TextView) findViewById(R.id.tv_name);        tv_password = (TextView) findViewById(R.id.tv_password);        tv_sex = (TextView) findViewById(R.id.tv_sex);        tv_name.setText("用户名:" + name);        tv_password.setText("密    码:" + password);        tv_sex.setText("性   别:" + sex);    }}

配置清单文件:AndroidManifest.xml:

<application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <activity            android:name=".MainActivity"            android:label="填写用户信息">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            android:name=".Main2Activity"            android:label="展示用户信息"></activity>    </application>

效果图:
这里写图片描述

这里写图片描述

阅读全文
0 0