站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
程式Android 安卓

【APP/Android】如何使用Intent, Bundle:在兩個Activity之間傳遞資料

tags: APP Android

IntentExample 專案連結

IntentExample 專案:連結

Intent 傳送單一資料

簡介

  • Intent一般用來跳轉Activity或兩個Activity間傳遞資料
  • 從 Activity A 跳到 Activity B,某人要從A地到B地靠的是交通工具 (Intent)

常用方法

  • setClass(Context context, Class<?> class)
    從傳送資料的context (Activity A),到接收資料的class (Activity B)
  • putExtra(String name, 各種型態 value)
    類似Map的概念,name是傳送資料的key,value是傳送資料的值
  • putExtras(Bundle bundle):將要傳送的資料 (Bundle) 放到交通工具 (Intent) 上
  • getExtras(),
    getStringExtra(String name),
    getIntExtra(String name, int defaultValue)…:取得資料

Example 範例

  • 範例1:直接跳轉
Intent intent = new Intent();
intent.setClass(A.this, B.class)
startActivity(intent);
  • 範例2:有傳送資料 (單一資料)
    1. A.class (傳送單一資料)
    Intent intent = new Intent();
    intent.setClass(A.this, B.class);
    intent.putExtra("name", name) //可放所有基本類別
    startActivity(intent);
    
    1. B.class (接收單一資料)
    Intent intent = this.getIntent();
    String name = intent.getStringExtra("name");
    

Bundle 傳送複數資料

簡介

  • 傳遞資料從A地送到B地去,把東西(Bundle)放在交通工具(Intent)上
  • Bundle如果在程式未來有需求更動時,會帶來較方便的效果。例如,如果之後決定要在傳遞資料前,先將所有資料儲存在資料庫時,就可將Bundle物件傳遞到其他方法去處理,而不用傳遞多個散亂資料。

常用方法

  • putFloat(String key, float value),
    putString(String key, String value)…:將要傳送的資料放入Bundle中
  • getFloat(String key),
    getString(String key)…:取得Bundle中的資料

Example 範例

  • 範例:傳送資料 (複數資料)
    1. A.class (傳送複數資料)
    Intent intent = new Intent();  
    intent.setClass(A.this, B.class);  
    Bundle bundle = new Bundle();  
    bundle.putString("username", username.getText().toString()); 
    bundle.putString("spinner", spinner.getSelectedItem().toString());  
    intent.putExtras(bundle);  
    startActivity(intent);
    
    1. B.class (接收複數資料)
    // 取得前一個Activity傳過來的資料  
    Bundle bundle = this.getIntent().getExtras();  
    // 將取得的Bundle資料設定  
    if (bundle != null) {  
    String result = bundle.getString("username");  
    String result2 = bundle.getString("spinner");
    // 顯示結果
    editText.setText("資料1:" + result + ", 資料2:" + result2);
    }
    

Reference 參考資料

  1. Intent 官方文件:
    https://developer.android.com/guide/components/intents-filters.html?hl=zh-tw
  2. Intent 官方文件:https://developer.android.com/reference/android/content/Intent.html
  3. Bundle 官方文件:https://developer.android.com/reference/android/os/Bundle.html
  4. Android Intent&Bundle 傳遞資料(包含傳遞自定義物件):http://cookiesp.pixnet.net/blog/post/84190702-android-intent%26bundle-傳遞資料(包含傳遞自定義物
  5. [Android] Bundle Error: java.lang.NullPointerException:https://bryceknowhow.blogspot.tw/2013/12/android-bundle-error.html
  6. Intent 認識與應用:https://brian7261.blogspot.tw/2016/04/intent-activity.html
  7. How to use bundle class for passing data of any type in Android?http://www.includehelp.com/android/use-of-bundle-class-for-passing-data-of-any-type.aspx

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽