您的位置:首页 > 其它

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

2017-05-25 17:56 405 查看
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对象,启动Activity02
Intent 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>


效果图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: