1. 程式人生 > >【Android 開發】 : Activity之間傳遞資料的幾種方式

【Android 開發】 : Activity之間傳遞資料的幾種方式

在Android開發中,我們通常需要在不同的Activity之間傳遞資料,下面我們就來總結一下在Activity之間資料傳遞的幾種方式。

1. 使用Intent來傳遞資料

Intent表示意圖,很多時候我們都會利用Android的Intent來在各個Activity之間傳遞資料,這也是Android比較官方的一種資料傳遞的方式

需求1:從一個Activity(IntentDemo)跳轉到另外一個Activity(Other),其中利用Intent來傳遞資料

程式Demo如下:

IntentDemo.java

  1. package com.android.intentdemo;  
  2. import android.app.Activity;  
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.view.View;  
  6. import android.widget.Button;  
  7. publicclass IntentDemo extends Activity {  
  8.     private Button button;  
  9.     @Override
  10.     publicvoid onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.main);  
  13.         initComponent();  
  14.         button.setOnClickListener(new View.OnClickListener() {  
  15.             @Override
  16.             publicvoid onClick(View v) {  
  17.                 Intent intent = new Intent(IntentDemo.
    this, Other.class);  
  18.                 // 在Intent中傳遞資料
  19.                 intent.putExtra("name""AHuier");  
  20.                 intent.putExtra("age"22);  
  21.                 intent.putExtra("address""XiaMen");  
  22.                 // 啟動Intent
  23.                 startActivity(intent);  
  24.             }  
  25.         });  
  26.     }  
  27.     privatevoid initComponent() {  
  28.         button = (Button) findViewById(R.id.button);  
  29.     }  
  30. }  

other.java

  1. package com.android.intentdemo;  
  2. import android.app.Activity;  
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.widget.TextView;  
  6. publicclass Other extends Activity {  
  7.     private TextView textView;  
  8.     @Override
  9.     protectedvoid onCreate(Bundle savedInstanceState) {  
  10.         // TODO Auto-generated method stub
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.other);  
  13.         initComponent();  
  14.         Intent intent = getIntent();  
  15.         int age = intent.getIntExtra("age"0);  
  16.         String name = intent.getStringExtra("name");  
  17.         String address = intent.getStringExtra("address");  
  18.         textView.setText("My age is " + age + "\n" + "My name is " + name + "\n" + "My address "
  19.                 + address);  
  20.     }  
  21.     privatevoid initComponent() {  
  22.         textView = (TextView) findViewById(R.id.msg);  
  23.     }  
  24. }  

  ——>

2. 在Activity之間使用靜態變數傳遞資料

在上例中使用Intent可以很方便的在不同的Activity之間傳遞資料,這個也是官方推薦的方式,但是也有一定的侷限性,就是Intent無法傳遞不能序列化的物件。我們可以使用靜態變數來解決這個問題。

需求1:從一個Activity(IntentDemo)跳轉到另外一個Activity(Other),其中利用靜態變數來傳遞資料

程式Demo:

IntentDemo.java

  1. Intent intent = new Intent();  
  2. intent.setClass(IntentDemo.this, Other.class);  
  3. Other.age = 22;  
  4. Other.name = "AHuier";  
  5. Other.address = "XiaMen";  
  6. startActivity(intent);  

Other.java
  1. private TextView textView;  
  2. publicstaticint age;  
  3. publicstatic String name;  
  4. publicstatic String address;  
  5. @Override
  6. protectedvoid onCreate(Bundle savedInstanceState) {  
  7.     // TODO Auto-generated method stub
  8.     super.onCreate(savedInstanceState);  
  9.     setContentView(R.layout.other);  
  10.     initComponent();  
  11.     textView.setText("My age is " + age + "\n" + "My name is " + name + "\n" + "My address "
  12.             + address);  
  13. }  
 ——>

3. 通剪下板傳遞資料

   在Activity之間資料傳遞還可以利用一些技巧,不管是Windows還是Linux作業系統,都會支援一種剪下板的技術,也就是一個程式將一些資料複製到剪下板上,然後其他的任何程式都可以從剪下板中獲取資料。

1) 利用剪下板傳遞普通的資料,如字串

   需求1:從一個Activity(IntentDemo)跳轉到另外一個Activity(Other),通過剪下板傳遞資料

   程式Demo:

IntentDemo.java

  1. ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);  
  2. String name = "AHuier";  
  3. clipboardManager.setText(name);  
  4. Intent intent = new Intent(IntentDemo.this, Other.class);  
  5. startActivity(intent);  
Other.java
  1. ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);  
  2. String msgString = clipboardManager.getText().toString();  
  3. textView.setText(msgString);  

 ——> 

1) 利用剪下板傳遞複雜的資料,如物件

需求1:從一個Activity(IntentDemo)跳轉到另外一個Activity(Other),通過剪下板傳遞資料

新建一個MyData.java

  1. package com.android.intentdemo;  
  2. import java.io.Serializable;  
  3. publicclass MyData implements Serializable {  
  4.     private String name;  
  5.     privateint age;  
  6.     public MyData(String name, int age) {  
  7.         super();  
  8.         this.name = name;  
  9. 相關推薦

    Android 開發 : Activity之間傳遞資料方式

    在Android開發中,我們通常需要在不同的Activity之間傳遞資料,下面我們就來總結一下在Activity之間資料傳遞的幾種方式。 1. 使用Intent來傳遞資料 Intent表示意圖,很多時候我們都會利用Android的Intent來在各個A

    Android 兩個Activity之間傳遞資料及返回

    從Activity1帶引數跳轉到Activity2這個經常用到,比較熟悉,但如何從Activity2將資料返回給Activity1呢?這個其實也不麻煩,動手敲一下就知道了。 Activity1程式碼:public class MainActivity extends A

    Android 開發: Android客戶端與服務端之間使用JSON互動資料

        在前面的兩講中,我們講解了JSON資料格式的一些基本知識,以及做一些小Demo,這一講我們在前面的基礎上來做一個綜合的可擴充套件的Demo,主要是針對Android客戶端解析服務端傳遞過來的JSON資料。整個Demo所作的操作如下圖所示 1. 服務端    服務端

    Android 開發: Android客戶端與服務端之間使用GSON互動資料

        前面我們有提到google的Gson技術的介紹[GSON 資料格式詳解],這一講我們來詳細學習一下Android客戶端與服務端之間使用GSON進行JSON資料的解析,關於GSON的技術我們已經在前面兩講中提到過,對GSON不瞭解的讀者可以先去看前面兩講的博文,這一講

    關於Android Activity之間傳遞資料的6方式

    使用Inten的putExtra傳遞 第一個Activity中 ? 1 2 3 4 5 6 //建立意圖物件  Intent intent = new Intent(this,TwoActivity.class);  //設定傳

    Android開發Android 刪除指定檔案和資料

    /** * 刪除單個檔案 * @param filePath 被刪除檔案的檔名 * @return 檔案刪除成功返回true,否則返回false */ public boolean deleteFile(String filePath) {

    Android Intent傳值(兩個Activity之間傳遞資料

    在兩個Activity之間傳遞資料,最終都是通過Intent傳遞,但設定資料和儲存資料方式有兩種(使用Intent 和 Bundle),分別對應如下: 設定資料(MainActivity.java) 方法一:1.直接用intent.putExtra(“name”,“張三”)

    Android中不同Activity之間資料傳遞

    需要用到的類及方法: 類似:兩個國家做貿易,交易貨物; --傳遞載體:intent(貨船) --需要傳遞的內容:用bundle(集裝箱)包裝的string(某控制元件的值)<bundle是以鍵值

    Android 學習之路一:Activity之間傳遞資料的四方式

    傳遞資料 新建 Activity 在專案中右鍵,選擇 New,繼續選擇中下方的 Activity,最後是 Blank Activity。 此時 Android Studio 會為我們自動新增一個對應的佈局檔案,為佈局檔案中的 TextView 新增 I

    android開發實現語音資料實時採集/播放

    今天無意中看到一篇關於android實現語音資料實時採集/播放的文章,感覺寫得非常棒,挺全面的,所以特地轉載了,還有其實還可以根據這篇部落格內容考慮下視訊資料實時採集、播放的實現。部落格原文地址http://blog.csdn.net/lantingshuxu/article/details/5352031

    Android基礎 -- Activity之間傳遞資料(bitmap和map物件)

    這邊文章很古老了,看到還有朋友回覆,這裡更新幾點,避免誤導大家。 第一,傳遞HashMap物件  HashMap本身已經實現了Cloneable, Serializable,Intent傳遞時,直接強轉就可以了。(感謝@qcks指正) Map<String, St

    android開發手勢滑動關閉Activity(隨手指消失)的輔助類的實現

    【CSDN抽風,把我寫一個多小時的東西覆蓋了。真的是嗶了狗了,自己又沒有備份。。。重寫吧。。。】 這個類主要是實現向右滑動關閉Activity,效果如下: 老套路,先寫思路: 1)將Activity的背景設定為透明模式。(從而可以看到下一層Activi

    Android開發之Fragment與Acitvity通信

    對象 p s ets roi mit blog () open findview   上一篇我們講到與Fragment有關的經常使用函數,既然Fragment被稱為是“小Activity”。如今我們來講一下Fragment怎樣與Acitivity通信。

    Android開發找樂,一個笑話App的制作過程記錄

    override pbo rdm data root 恰恰 功能 sql htm 緣起 想做一個笑話App的原因是由於在知乎上看過一個帖子。做Android能夠有哪些數據能夠練手,裏面推薦了幾個數據開放平臺。在這些平臺中無一不是有公共的笑話接口,當時心

    Activity之間傳遞資料方式及常見問題總結

    Activity之間傳遞資料一般通過以下幾種方式實現: 通過intent傳遞資料 通過Application 使用單例 靜態成員變數。(可以考慮 WeakReferences) 持久化(sqlite、share preference、file等)

    Android開發:在任意目錄執行NDK編譯

    本文以簡單的例子講述如何在任意目錄把自己寫的C程式碼使用NDK提供的交叉編譯該工具來編譯成Android可使用的靜態庫/動態庫。 1. 準備環境 首先,你得安裝了Android的NDK編譯工具,假設你的NDK的根目錄在 /opt/android/ndk . 當然

    Android開發安卓炫酷效果集合

    1. android-ripple-background 能產生波浪效果的背景圖片控制元件,可以自定義顏色,波浪擴充套件的速度,波浪的圈數。 github地址 2. android-shapeLoadingView-master 高仿新版58 載入動畫 github地址 3. Arr

    Android開發URL[] 轉成 bitmap[]

    public static Bitmap[] getBitmapFromURL(String[] path) throws MalformedURLException { Bitmap[] b = new Bitmap[path.length]; for (int i =

    Android開發View 轉 Bitmap

    public static Bitmap loadBitmapFromView(View v) { int w = v.getWidth(); int h = v.getHeight(); Bitmap bmp = Bitmap.createBitmap(w,

    Android開發Bitmap的質量壓縮法

    public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); //質量壓縮方法,這裡100表示不壓縮,把壓縮後的資料存放到