Intent 类初阶
(一)、概述
Intent 类是 Android 组件间的桥梁,该类负责启动组件,在组件之间传递数据。
(二)、创建 Intent 对象
方式(1):Intent intent = new Intent(起始组件的对象,目标组件类.class)
示例: new intent(this,TargetActivity.class)
说明:
(1)参数1是当前 Activity 类的对象
(2)参数2是目标组件类 class
(3)Android有四大组件,分别是:Activity、Service、ContentProvider和Broadcast
方式(2):Intent intent = new Intent();
Intent.setClass(起始组件的对象,目标组件类.class);
方式(3):获取上一个 Activity 传递过来的 intent 对象。
Intent = getIntent();
通过 Intent 传递数据
(三)、常用方法
1、putExtra(key,value) 作用:以键/值对形式在 intent 对象中保存基本数据类型的数据。 2、putExtra(key,(Serializable)Object) 作用:若存放的是对象,则要将对象序列化再存放数据。 3、getIntExtra(key,intDefaultValue) 作用:获取存放在 intent 对象中的键名为 key 的 int 类型的数据。若获取不到,则赋一个默认值 intDefaultValue。 4、getDoubleExtra(key,doubleValue) 作用:获取存放在 intent 对象中的键名为 key 的 double 类型的数据。若获取不到,则赋一个默认值 longDefaultValue。 5、getLongExtra(key,longDefaultValue) 作用:获取存放在 intent 对象中的键名为 key 的 long 类型的数据。若获取不到,则赋一个默认值为 longDefaultValue。 6、getCharExtra(key,charDefault) 作用:获取存放在 intent 对象中的键名为 key 的 char 类型的数据。若获取不到,则赋一个默认值为 charDefaultValue。 7、getString(key) 作用:获取存放在 intent 对象中的键名为 key 的 String 类型的数据。 8、getStringArray(key) 作用:获取存放在 intent 对象中的键名为 key 的 String 类型的数组。 9、getxxxArray(key) 作用:获取存放在 intent 对象中的键名为 key 的基本数据类型的数组。 10、getSerializableExtra(key) 作用:获取存放在 intent 对象中的键名为 key 的对象。 这个对象必须实现了Serializable接口,然后我们就可以用putExtra(key,value),放进去,接着就可以使用getSerializableExtra(key)来获取对象了。
实例:
MainActivity.java的代码
package com.jxust.day04_01_startactivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
//使用getSerializableExtra来获取前面LoginActivity传过来的对象
User user = (User) intent.getSerializableExtra("user");
// Toast.makeText(this, user.toString(), 4000).show();
Toast.makeText(this, "用户编号:"+user.getId()+"用户密码:"+user.getPassword(), 4000).show();
//使用getStringExtra来获取前面LoginActivity传过来的数据并且显示
// String id = intent.getStringExtra("id");
// String password = intent.getStringExtra("password");
// Toast.makeText(this, "用户编号:"+id+"用户密码:"+password, 4000).show();
}
}
LoginActivity.java的代码
package com.jxust.day04_01_startactivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
public class LoginActivity extends Activity {
EditText metId,metPwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
setListener();
initView();
}
private void initView() {
metId = (EditText) findViewById(R.id.etId);
metPwd = (EditText) findViewById(R.id.etPwd);
}
private void setListener() {
setLoginClickListener();
}
private void setLoginClickListener() {
findViewById(R.id.btnLogin).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String id = metId.getText().toString();
String password = metPwd.getText().toString();
User user = new User(Integer.parseInt(id),password);
//从LoginActivity跳转到MainActivity
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
//使用putExtra将User类传递到MainActivity
intent.putExtra("user", user);
//使用putExtra分别将属性传递到MainActivity
// intent .putExtra("id", id);
// intent.putExtra("password", password);
startActivity(intent);
}
});
}
}
activity
<?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:stretchColumns="1" > <TableRow> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="输入编号" android:textSize="15sp" /> <EditText android:id="@+id/etId" android:layout_marginLeft="10dp" android:hint="2-10个字符" /> </TableRow> <TableRow> <TextView android:text="密码" android:textSize="15sp" /> <EditText android:id="@+id/etPwd" android:layout_marginLeft="10dp" android:hint="2-10个字符" android:password="true" /> </TableRow> </TableLayout> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:stretchColumns="1" > </TableLayout> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:stretchColumns="1" > </TableLayout> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:stretchColumns="1" > <TableRow> <Button android:layout_height="wrap_content" android:layout_weight="1" android:visibility="invisible" /> <Button android:id="@+id/btnLogin" android:layout_height="wrap_content" android:drawableLeft="@drawable/login" android:background="@drawable/background" android:padding="7dp" android:text="登录" /> <Button android:layout_height="wrap_content" android:layout_weight="1" android:visibility="invisible" /> <Button android:id="@+id/btnExit" android:layout_height="wrap_content" android:drawableLeft="@drawable/exit" android:text="退出" android:padding="7dp" android:background="@drawable/background"/> <Button android:layout_height="wrap_content" android:layout_weight="1" android:visibility="invisible" /> </TableRow> </TableLayout> </TableLayout>
activity_main.xml的代码
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.jxust.day04_01_startactivity.MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>