Android多個Activity之間的頁面跳轉帶參傳遞與返回
阿新 • • 發佈:2019-01-10
一.普通頁面跳轉
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的按鈕點選事件
最後別忘記了在AndroidManifest.xml檔案中註冊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" >
養成習慣,在每次建立新的Activity時,就及時去AndroidManifest.xml註冊
二.Activity帶參跳轉帶參跳轉則需要使用 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();
}
});
}
}
引數傳遞與返回 需要注意前後的 鍵 相對應