Android開發 - 頁面跳轉以及資料傳遞
阿新 • • 發佈:2018-11-10
Android開發 - 頁面跳轉以及資料傳遞
- 記錄程式碼詳情參閱Project-FoodList
教程:
- 頁面需要先在
AndroidManifest.xml
中註冊,否則會造成閃退activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <
- 頁面跳轉以及傳遞資料詳述
- 使用
startActivityForResult
方法。然後利用onActivityResult
方法處理返回的結果 - 跳轉需要傳遞資訊使用到
Intend
機制,將需要被傳遞的物件序列化以後放在Buddle中儲存 - 簡單例子
-
對應
activity_main
頁面的類public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // do something } }
-
對應
detail
頁面的類public class DetailActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.detail); // do something } }
-
MainActivity.java所繫結的
activity_main
頁面跳轉到DetailActivity所繫結的detail
頁面Intent myIntent = new Intent(MainActivity.this, DetailActivity.class); // 例項化一個Bundle Bundle myBundle = new Bundle(); // 把item資料放入到bundle中 myBundle.putSerializable("item", data.get(position)); //把bundle放入intent裡 myIntent.putExtra("Message", myBundle); startActivityForResult(myIntent, 0);
-
DetailActivity接受處理傳遞過來的資訊
// 獲取資料 final Intent myIntend = getIntent(); //從intent取出bundle Bundle myBundle = myIntend.getBundleExtra("Message"); // 獲取bundle中資料 final Collection clickedItem = (Collection) myBundle.getSerializable("item");
-
DetailActivity所繫結的頁面返回到MainActivity所繫結的頁面,同時傳遞一些資訊,需要呼叫的
setResult
方法進行資料傳遞,finish
方法結束頁面//資料是使用Intent返回 Intent intent = new Intent(DetailActivity.this, MainActivity.class); //把返回資料存入Bundle Bundle bundle = new Bundle(); bundle.putSerializable("item", clickedItem); intent.putExtra("Message", bundle); //設定返回資料 setResult(RESULT_OK, intent); // 關閉頁面 finish();
-
MainActivity使用
onActivityResult
進行回撥, 為了得到傳回的資料,必須在MainActivity類重寫onActivityResult方法/** * requestCode 請求碼,即呼叫startActivityForResult()傳遞過去的值 * resultCode 結果碼,結果碼用於標識返回資料來自哪個新Activity * data 為返回的intent */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // 得到返回的資料 if(resultCode == RESULT_OK) { //從intent取出bundle Bundle myBundle = data.getBundleExtra("Message"); // 獲取bundle中資料 Collection clickedItem = (Collection) myBundle.getSerializable("item"); // do something } }
-
- 使用