一.普通页面跳转
Activity之间进行跳转需要使用Intent类 Intent 意图
第一个Activity
<Button
android:id="@+id/btn_open"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="开启新的Activity" />
<TextView
android:id="@+id/tv_first"
android:gravity="center"
android:text="第一个Activity"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
第二个Activity
<Button
android:id="@+id/btn_back"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="返回第一个Activity" />
<TextView
android:id="@+id/tv_second"
android:gravity="center"
android:text="第二个Activity"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
第一个Activity的按钮点击事件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button btn_open = (Button) findViewById(R.id.btn_open);
btn_open.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
//启动意图
startActivity(intent);
}
});
}
最后别忘记了在AndroidManifest.xml文件中注册Activity
<activity android:name=".SecondActivity" >
养成习惯,在每次创建新的Activity时,就及时去AndroidManifest.xml注册
二.Activity带参跳转
带参跳转则需要使用 Intent 的 putExtra(键,值)方法来放入参数,然后在第二个Activity中使用 getIntent().get类型Extra(键)来取得值
带参跳转则需要使用 Intent 的 putExtra(键,值)方法来放入参数,然后在第二个Activity中使用 getIntent().get类型Extra(键)来取得值
第一个Activity按钮的点击事件
只比前面多了一行代码 intent.putExtra("key", "我是参数");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button btn_open = (Button) findViewById(R.id.btn_open);
btn_open.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("key", "我是参数");
//启动意图
startActivity(intent);
}
});
}
第二个Activity中的java代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView tv_second = (TextView) findViewById(R.id.tv_second);
// 得到Intent
Intent intent = getIntent();
// 通过key得到值 值为字符串类型
String value = intent.getStringExtra("key");
// 在TextView上设置 值
tv_second.setText(value);
}
三.带参传递的参数还可以是对象。
传递对象必须保证对象实现序列化
新建一个User类并实现序列化 Serializable
public class User implements Serializable{
/**
* 序列化id,建议加上,
*/
private static final long serialVersionUID = 1L;
// 用户名
private String username;
// 密码
private String password;
public User() {
}
public User(String username, String password) {
super();
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
第一个Activity中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button btn_open = (Button) findViewById(R.id.btn_open);
btn_open.setOnClickListener(new OnClickListener() {
// 得到User类,并赋值
User user = new User("账号", "密码");
@Override
public void onClick(View v) {
// 建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
// 放入需要传递的对象
intent.putExtra("key", user);
// 启动意图
startActivity(intent);
}
});
}
第二个Activity中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView tv_second = (TextView) findViewById(R.id.tv_second);
// 得到Intent
Intent intent = getIntent();
// 通过key得到得到对象
// getSerializableExtra得到序列化数据
User user = (User) intent.getSerializableExtra("key");
// 在TextView上设置 用户名和密码
tv_second.setText(user.getUsername() + " " + user.getPassword());
}
在传递对象的时候,重点是保证对象实现序列化 Serializable并使用getSerializableExtra得到序列化数据
四.Activity带参返回
启动新的Activity 使用startActivityForResult(intent,requestCode)
必须重写onActivityResult(request,result,data) 方法来获取返回数据启动
第一个Activity
public class FirstActivity extends Activity {
// 定义请求码,不同界面的跳转请求码要求不同,为了识别是哪个控件传递数据
private final static int sendUser = 1;
private TextView tv_first;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Button btn_open = (Button) findViewById(R.id.btn_open);
tv_first = (TextView) findViewById(R.id.tv_first);
btn_open.setOnClickListener(new OnClickListener() {
// 得到User类,并赋值
User user = new User("账号", "密码");
@Override
public void onClick(View v) {
// 建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
// 放入需要传递的对象
intent.putExtra("key", user);
// 启动意图(意图,请求码(int)) 请求码最好使用 final static定义 方便识别
startActivityForResult(intent, sendUser);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 如果请求码为 sendUser 返回码 为 RESULT_OK RESULT_OK为系统自定义的int值为 -1
if (requestCode == sendUser && resultCode == RESULT_OK) {
// 在TextView中设置返回信息
tv_first.setText(data.getStringExtra("key"));
}
}
}
第二个Activity
public class SecondActivity extends Activity {
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView tv_second = (TextView) findViewById(R.id.tv_second);
intent = getIntent();
// 通过key得到得到对象
// getSerializableExtra得到序列化数据
User user = (User) intent.getSerializableExtra("key");
// 在TextView上设置 用户名和密码
tv_second.setText(user.getUsername() + " " + user.getPassword());
// 找到按钮,通过点击按钮返回第一个界面
Button btn_back = (Button) findViewById(R.id.btn_back);
// 点击事件
btn_back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 发送返回数据 key可自己定义,但前后必须一样
intent.putExtra("key", "接收到数据了,现在通知第一个Activity");
// RESULT_OK 系统定义的int 值 为-1
setResult(RESULT_OK, intent);
// 关闭当前 Activity
finish();
}
});
}
}
参数传递与返回 需要注意前后的 键 相对应