在Activity之间传递数据,主要的方法有四种:

  • 利用静态字段传递;

  • 利用Intent传递;

  • 利用ClipboardManager传递;

  • 利用全局变量传递。

下面就一一道来,首先呢,创建一个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,并显示传递的数据。(注:具体代码在最后给出)

1.利用静态字段传递

这种方法应该是最简单的一种了,利用每个Activity子类的公有静态字段传递,无论是当前Activity中的字段,还是要跳转到的Activity中的字段,都可以作为数据传递的载体。因为静态字段是类的对象所共有的,与具体实例无关,所以用该方法可以实现数据传递。具体实现是比较简单的,比如在Main和Other中各添加一个公有静态String字段,在响应按钮点击事件的方法中,分别将两个字段赋值,然后在TextView中显示出来就可以了。

2.利用Intent传递

这是比较通用的方法,因为在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*/packagecom.example.transfer;importcom.example.transfer.R;importandroid.R.string;importandroid.os.Bundle;importandroid.app.Activity;importandroid.content.ClipboardManager;importandroid.content.Intent;importandroid.view.Menu;importandroid.view.View;importandroid.widget.Button;publicclassMainextendsActivity{Buttonbutton;MyDatamyData;publicstaticStringmajor="软件工程";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);button=(Button)this.findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){//TODO自动生成的方法存根//利用Intent使Activity跳转//可以直接使用构造方法实现;//Intentintent=newIntent(Main.this,OtherActivity.class);//也可以使用其中的setClass方法实现Intentintent=newIntent();intent.setClass(Main.this,OtherActivity.class);//利用Intent传递数据intent.putExtra("College","西南交通大学");intent.putExtra("Grade",2011);//利用静态变量传递数据,直接给静态变量赋值OtherActivity.myclass="三班";//利用剪切板传递数据ClipboardManagerclipboardManager=(ClipboardManager)getSystemService(CLIPBOARD_SERVICE);Stringaddress="成都";clipboardManager.setText(address);//利用全局变量传递数据myData=(MyData)getApplication();myData.setName("笑缘心归");startActivity(intent);//启动Intent}});}}

/***OtherActivity.java*/packagecom.example.transfer;importcom.example.transfer.R;importandroid.app.Activity;importandroid.content.ClipboardManager;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.TextView;/***@authorMlion**/publicclassOtherActivityextendsActivity{MyDatamyData;privateTextViewtextView;publicstaticStringmyclass=newString();@OverrideprotectedvoidonCreate(BundlesavedInstanceState){//TODO自动生成的方法存根super.onCreate(savedInstanceState);setContentView(R.layout.other);//加载布局文件//获取Intent传入的数据并显示//使用get...Extra方法获得Intent传递的值,直接使用静态变量传值Intentintent=getIntent();textView=(TextView)this.findViewById(R.id.msg);ClipboardManagerclipboardManager=(ClipboardManager)getSystemService(CLIPBOARD_SERVICE);Stringaddress=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*/packagecom.example.transfer;importandroid.app.Application;publicclassMyDataextendsApplication{publicStringname=newString();publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}}

在Manifest.xml中的<Application >标签中添加以下代码

android:name=".MyData"<activityandroid:name="com.example.transfer.OtherActivity"></activity>

在main.xml中添加:

<Buttonandroid:id="@+id/button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="数据传递"/>

在other.xml中添加:

<TextViewandroid:id="@+id/msg"android:layout_width="fill_parent"android:layout_height="fill_parent"/>

运行结果:



更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. 一个Activity的显示过程总结(一)
  4. android Activity启动流程
  5. [Android(安卓)Training视频系列]1.4 Starting Another Activity
  6. 【总结】Mac版Android(安卓)Studio常用快捷键总结
  7. Android中manager
  8. listview 中Item中含有Button 等造成Item点击无效的解决方法
  9. OKHttp3的简单使用(转)

随机推荐

  1. android Activity區域監聽
  2. android ip地址,手机号码,邮箱格式验证
  3. Android各个版本API的差异
  4. 模仿android新浪微博手机客户端项目
  5. Android——检测TXT文件中是否含有双字节
  6. Android(安卓)广播大全 Intent Action 事
  7. Android(安卓)命令 - sqlite3
  8. Android(安卓)WebView学习
  9. 安卓霓虹灯效果
  10. Button 有按下效果