Intent除了跳轉頁面外也可以傳送資料給另一頁,如果希望傳遞資料,可以嘗試下列程式碼。
// 傳資料
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
intent.putExtra("username", "feng");//傳送key:username,value:feng給MainActivity2
startActivity(intent);
// 接收資料(在 MainActivity2)
String name = getIntent().getStringExtra("username");
接下來就是實際上手嘗試,MainActivity這一頁的前半部分都跟原本一樣,只是我們為了傳送資料跟接收回傳回來的資料,需要多加幾行程式碼。
.putExtra("Extra Data", "Hello!")是用來將資料傳遞給下一頁,Extra Data是資料的名稱,"Hello!"則是實際傳遞的資料,如果希望會回傳結果就需要透過startActivityForResult(intent, 1)
intent.putExtra("Extra Data", "Hello!"); // 傳輸資料
//啟動MainActivity2,並且希望從該 Activity 回傳結果。
startActivityForResult(intent, 1);
第二頁MainActivity2則須先透過getIntent()取得傳遞過來的Intent,再利用getStringExtra("Extra Data")從中取出名為 "Extra Data" 的字串資料,成功接收到資料後textview的文字就會更改成Extra Data中的字串"Hello!"
Intent intent = getIntent();
String data = intent.getStringExtra("Extra Data");
textView.setText(data);//顯示
那從第二頁回傳過來也是差不多的道理,設定回傳資料的key跟value
// 放入要回傳的字串資料,key 是 "Result"
resultIntent.putExtra("Result", "Hello! I am back!");
setResult(RESULT_OK, resultIntent);// 設定此 Activity 的結果為 RESULT_OK 且帶上回傳 Intent
finish(); // 關閉MainActivity2,回到MainActivity
第一頁確認是否正確回傳並接收資料
// 檢查是否requestCode = 1 且有成功回傳
if (requestCode == 1 && resultCode == RESULT_OK && data != null) {
// 取得從 MainActivity2 回傳過來的資料Result並顯示在textView
String result = data.getStringExtra("Result");
textView.setText(result);
}
MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
button=findViewById(R.id.button);//綁定元件
textView = findViewById(R.id.textView);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 建立一個 Intent,從 MainActivity 跳轉到 MainActivity2
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
intent.putExtra("Extra Data", "Hello!"); // 傳輸資料
startActivityForResult(intent, 1);//啟動MainActivity2,並且希望從該 Activity 回傳結果。
}
});
}
@Override //接收資料,若成功接收則在TextView上顯示Hello! I am back!
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 檢查是否requestCode = 1 且有成功回傳
if (requestCode == 1 && resultCode == RESULT_OK && data != null) {
// 取得從 MainActivity2 回傳過來的資料Result並顯示在textView
String result = data.getStringExtra("Result");
textView.setText(result);
}
}
MainActivity2:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main2);
button=findViewById(R.id.button);//綁定元件
textView = findViewById(R.id.textView);
// 取得MainActivity 傳來的 Intent
Intent intent = getIntent();
// 從 Intent 取出名為 "Extra Data" 的字串資料
String data = intent.getStringExtra("Extra Data");
textView.setText(data);//顯示
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent resultIntent = new Intent();// 建立一個新的 Intent 用來回傳資料
// 放入要回傳的字串資料,key 是 "Result"
resultIntent.putExtra("Result", "Hello! I am back!");
setResult(RESULT_OK, resultIntent);// 設定此 Activity 的結果為 RESULT_OK 且帶上回傳 Intent
finish(); // 關閉MainActivity2,回到MainActivity
}
});
}
排版的程式碼我就偷懶跟上一份用一樣的了,有需要可以去看上一篇
一開始第一頁顯示的是"這裡是第一頁",點擊跳轉到第二頁,第二頁會接收第一頁傳送過來的字串"Hello!"並顯示,點擊按鈕再次跳轉回到第一頁,由於第二頁傳送了字串"Hello! I am back!",因此第一頁接收到資料後就會改變顯示的字了~