在Activity之間傳遞數據,主要的方法有四種:java
利用靜態字段傳遞;android
利用Intent傳遞;app
利用ClipboardManager傳遞;ide
利用全局變量傳遞。佈局
下面就一一道來,首先呢,建立一個Android Application Project,自取名DataTransfer,class爲Main.java。要實現數據傳遞,至少要兩個Activity,因此分別添加一個class——Other.java(繼承自Activity),和一個layout文件——other.xml,並在AndroidManifest.xml中寫入Other這個Activity。而後在main.xml中添加一個按鈕Button,在other.xml中添加一個TextView,實如今點擊Button時,跳轉到Other,並顯示傳遞的數據。(注:具體代碼在最後給出)this
1.利用靜態字段傳遞spa
這種方法應該是最簡單的一種了,利用每一個Activity子類的公有靜態字段傳遞,不管是當前Activity中的字段,仍是要跳轉到的Activity中的字段,均可以做爲數據傳遞的載體。由於靜態字段是類的對象所共有的,與具體實例無關,因此用該方法能夠實現數據傳遞。具體實現是比較簡單的,好比在Main和Other中各添加一個公有靜態String字段,在響應按鈕點擊事件的方法中,分別將兩個字段賦值,而後在TextView中顯示出來就能夠了。code
2.利用Intent傳遞xml
這是比較通用的方法,由於在Activity之間跳轉,就須要使用Intent來實現,意圖就是來代表你要幹什麼。Intent對象中有一個putExtra方法,該方法大約有20多種重載,幾乎包含了全部值類型和引用類型,幾乎能夠傳遞各類數據。另外,還有接收數據的方法,例如接收int數據,能夠用getIntExtra方法。使用Intent傳遞就是在Main中使用putExtra方法使要傳遞的數據保存到內存中,而後在Other中使用相對應的方法來接收數據,並在TextView中顯示出來。對象
3.利用ClipboardManager傳遞
該方法算是比較巧妙的一種,利用系統提供的剪切板的服務來實現的,將要傳遞的數據數據放到剪切板上,而後在剪切板上取相應的數據。在兩個Activity中聲明ClipboardManager的對象,在Main中使用該對象的setText方法傳遞,在Other中使用getText方法得到數據。
4.利用全局變量傳遞
該方法是指利用繼承Application類保存全局變量來傳遞,SDK中對於該類的解釋:Base class for those who need to maintain global application state. You can provide your own implementation by specifying its name in your AndroidManifest.xml's <application> tag, which will cause that class to be instantiated for you when the process for your application/package is created。通俗的說就是,在程序或包建立的時候,該類就隨之創建了,所以,該類中的數據始終存在,對於全部的其餘類來講,就至關因而全局變量,能夠設置,也能夠獲取。該方法是比較好的一種,要使用該方法,首先新建一個類,並繼承自Application,在裏面添加字段。再使用Activity的getApplication方法來得到一個application對象,分別使用該對象的get和set方法傳遞和獲取數據。
具體代碼實現:
/*Main.java*/ package com. example.transfer ; import com. example.transfer .R; import android. R.string ; import android. os.Bundle ; import android. app.Activity ; import android. content.ClipboardManager ; import android. content.Intent ; import android. view.Menu ; import android. view.View ; import android. widget.Button ; public class Main extends Activity { Button button; MyData myData; public static String major = "軟件工程" ; @Override protected void onCreate( Bundle savedInstanceState) { super. onCreate(savedInstanceState ); setContentView(R .layout. main); button = (Button ) this. findViewById(R .id. button); button.setOnClickListener (new View.OnClickListener() { @Override public void onClick( View v) { // TODO 自動生成的方法存根 // 利用Intent使Activity跳轉 // 能夠直接使用構造方法實現; // Intent intent = new Intent(Main.this, OtherActivity.class); // 也可使用其中的setClass方法實現 Intent intent = new Intent(); intent .setClass( Main.this, OtherActivity.class); // 利用Intent傳遞數據 intent .putExtra( "College", "西南交通大學" ); intent .putExtra( "Grade", 2011 ); // 利用靜態變量傳遞數據,直接給靜態變量賦值 OtherActivity .myclass = "三班" ; // 利用剪切板傳遞數據 ClipboardManager clipboardManager = (ClipboardManager) getSystemService( CLIPBOARD_SERVICE); String address = "成都"; clipboardManager .setText(address); // 利用全局變量傳遞數據 myData = (MyData ) getApplication (); myData.setName ("笑緣心歸"); startActivity(intent );// 啓動Intent } }); } }
/** * OtherActivity.java */ package com.example.transfer; import com.example.transfer.R; import android.app.Activity; import android.content.ClipboardManager; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; /** * @author Mlion * */ public class OtherActivity extends Activity { MyData myData; private TextView textView; public static String myclass = new String(); @Override protected void onCreate(Bundle savedInstanceState) { // TODO 自動生成的方法存根 super.onCreate(savedInstanceState); setContentView(R.layout.other);// 加載佈局文件 // 獲取Intent傳入的數據並顯示 // 使用get...Extra方法得到Intent傳遞的值,直接使用靜態變量傳值 Intent intent = getIntent(); textView = (TextView) this.findViewById(R.id.msg); ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); String address = clipboardManager.getText().toString(); myData = (MyData) getApplication(); textView.setText("姓名:" + myData.getName() + "\n學校:" + intent.getStringExtra("College") + "\n年級:" + intent.getIntExtra("Grade", 0) + "\n專業:" + Main.major + "\n班級:" + myclass + "\n地址:" + address); } }
/*MyData.java*/ package com.example.transfer; import android.app.Application; public class MyData extends Application { public String name = new String(); public String getName() { return name; } public void setName(String name) { this.name = name; } }
在Manifest.xml中的<Application >標籤中添加如下代碼
android:name=".MyData" <activity android:name="com.example.transfer.OtherActivity" > </activity>
在main.xml中添加:
<Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="數據傳遞" />
在other.xml中添加:
<TextView android:id="@+id/msg" android:layout_width="fill_parent" android:layout_height="fill_parent" />
運行結果: