首页 > 技术文章 > 在Activity之间如何传递数据,请尽可能说出你所知道的传递数据的方法,并详细描述其实现过程。

dazuihou 2014-03-06 18:19 原文

在Activity之间如何传递数据,请尽可能说出你所知道的传递数据的方法,并详细描述其实现过程。

  答案:可以通过Intent对象、静态变量、剪切板和全局对象进行数据传递,具体的数据传递方法如下。

      1. Intent对象

     Intent对象时在Activity之间传递数据的传统方式(同样适合于Service和BroadcastReceiver)。可以通过Intent.putExtra方法设置要传递的数据,通过Intent.getXxxExtra方法获取传递的数据。其中的Xxx表示Int、String等字符串。下面代码使用Intent对象传递一个int类型的值,并在另一个Activity中接收该值。

     传递int类型的值

1 Intent intent=new Intent(this,MyActivity.class);
2 //保存Integer类型的值
3 intent.putExtra("intent_integer",300);
4 startActivity(intent);

     获取传递的int类型的值

1 int intentInteger=getIntent().getExrtras().getInt("intent_integer");

  传递数据的限制:只能传递Java简单类型的数据(包括简单类型的数组)以及实现了java.io.Serializable的类的对象实例(类成员也必须是可序列化的)。

     2. 静态变量

    将类成员定义成public static,就可以直接通过类成员来传递数据。使用静态变量可以传递任何类型的数据。

     3. 剪切板

    可以利用Android系统提供的剪切板存取数据,代码如下:

    将数据保存在剪切板中

  

1 Intent intent=new Intent(this,MyActivity.class);
2 //获得管理剪切板的对象(ClipboardManager)
3      ClipboardManager  clipboard=(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
4 //向剪切板保存字符串
5 ClipData cd=ClipData.newPlainText("label","通过clipboard传递的数据");
6 clipboard.setPrimaryClip(cd);
7 startActivity(intent);

    从剪切板获取数据

ClipboardManager  clipboard=(ClipboardManager)getSystemService(context.CLIPBOARD_SERVICE);
//从剪切板中获得字符串
if(clipboard.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN){
    ClipData cd=clipboard.getPrimaryClip();
        Item item=cd.getItemAt(0);
        txtView.setText(item.getText().toString());
}

   4. 全局对象

  可以为每一个应用程序定义一个全局的对象。该对象的创建由系统负责。使用全局对象需要一个继承自android.app.Application的类,并在该类中定义任何类型的成员变量和方法。

1 public class MyApp extends Application
2     {
3         public String country;
4         public Data data=new Data();//Data类不需要可序列化
5     }

  然后在AndroidManifest.xml文件中定义该类。

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="   "
        android:versionCode="1"
        android:versionName="1.0">
    <application android:name=".MyApp" android:icon="@drawable/icon" android:label="@String/app_name">
    ......
    </manifest>

  可以在应用程序中的任何地方通过如下代码获取MyApp类的对象。

  

MyApp myapp=(MyApp)getApplicationContext();

 

推荐阅读