一.普通頁面跳轉
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);
}
});
}
<activity android:name=".SecondActivity" >
帶參跳轉則需要使用 Intent 的 putExtra(鍵,值)方法來放入參數,然後在第二個Activity中使用 getIntent().get類型Extra(鍵)來取得值
@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);
}
});
}
@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);
}
三.帶參傳遞的參數還可以是對象。
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();
}
});
}
}
參數傳遞與返回 需要注意前後的 鍵 相對應