在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" />
运行结果: