在Activity之间如何传递数据,请尽可能说出你所知道的传递数据的方法,并详细描述其实现过程。
在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();