糊里糊塗學Android(1)——Activity之間的數據傳遞

    在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" />

運行結果:

相關文章
相關標籤/搜索