activity之间通过全局变量传递数据
activity之间通过全局变量传递数据
一、简介

Application域中的onCreate方法是Android程序的入口,Android程序运行的时候就自动加载Application的对象,感觉Main方法应该是封装在这个里面的。
activity中传递数据主要用intent方式和全局变量方式。
二、使用步骤
1、新建MyApplication类继承Application类
public class MyApplication extends Application
继承之后MyApplication类就是全局的了
2、在传输数据页面调用MyApplication类并生成数据
MyApplication app=(MyApplication) getApplication();
app.setName("fry");
app.setAge(22);
3、在接收数据页面调用MyApplication类并输出数据
MyApplication app=(MyApplication) getApplication();
tv_answer.setText("app:" + app );
4、在AndroidManifest.xml配置文件中添加MyApplication类的Android启动配置
android:name="activityGlobelVariable.MyApplication"
5、大功告成
三、具体代码实例
代码中进行了两次优化:
一是对MyApplication类实现了单例化模式,便于在没有继承Activity的类里面调用
调用:
MyApplication app = MyApplication.getInstance();
二是对于传输多组数据,使用了HashMap
private HashMap<String, Object> map=new HashMap<String, Object>();
结果图:


activityGlobelVariable.MyApplication
package activityGlobelVariable;
import java.util.HashMap;
import android.app.Application;
public class MyApplication extends Application{
//也可以用hashMap来代替这些私有变量
private HashMap<String, Object> map=new HashMap<String, Object>();
private String name;
private int age;
public HashMap<String, Object> getMap() {
return map;
}
public void setMap(HashMap<String, Object> map) {
this.map = map;
}
39 private static MyApplication instance=null;
40
41 public static MyApplication getInstance(){
42 return instance;
43 }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public MyApplication() {
super();
}
public MyApplication(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
86 public void onCreate() {
87 // TODO Auto-generated method stub
88 super.onCreate();
89 this.instance=this;
90 }
@Override
public String toString() {
return "MyApplication [name=" + name + ", age=" + age + "]";
}
}
activityGlobelVariable.MainActivity
package activityGlobelVariable; import com.example.activityGlobelVariable.R; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity{
private Button btn_openActivty;//创建一个button对象
MyApplication app = MyApplication.getInstance();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//父类操作
setContentView(R.layout.activity_main);//引入名为activity_main的界面
btn_openActivty=(Button) findViewById(R.id.btn_openActivity);//找id为btn_openActivity的button
btn_openActivty.setOnClickListener(new OnClickListener() {//设置button点击监听 @Override
public void onClick(View v) {//onclick事件
// TODO Auto-generated method stub
Intent intent=new Intent(MainActivity.this,Activity01.class);//初始化intent
//Application域的访问
//MyApplication app=(MyApplication) getApplication();
app.setName("fry");
app.setAge(22);
//HashMap的应用
app.getMap().put("data1", "data1");
app.getMap().put("data2", 2.2);
startActivity(intent);//打开activity
}
});
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
app.getMap().remove("data1");
app.getMap().remove("data2");
}
}
activityGlobelVariable.Activity01
package activityGlobelVariable; import com.example.activityGlobelVariable.R; import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView; public class Activity01 extends Activity {
private static final MyApplication MyApplication = null;
private TextView tv_answer; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity01);
tv_answer = (TextView) findViewById(R.id.tv_answer);
/*
* getApplication()是Activity类里面的方法,别的类没有
* 因为MyApplication继承了Application,是全局的 在配置文件里面要配MyApplication
* MyApplication app=(MyApplication) getApplication();
* 上面这句话就是访问调用MyApplication
*/
// MyApplication app=(MyApplication) getApplication();
MyApplication app = MyApplication.getInstance(); // HashMap的应用 String s1 = (String) app.getMap().get("data1");
double d1 = (Double) app.getMap().get("data2");
tv_answer.setText("app:" + app + "\ns1:" + s1 + "\nd1:" + d1);
}
}
/activityGlobelVariable/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.activityGlobelVariable"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" /> <application
android:name="activityGlobelVariable.MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="activityGlobelVariable.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="activityGlobelVariable.Activity01" android:exported="true"></activity>
</application> </manifest>
activity之间通过全局变量传递数据的更多相关文章
- Activity之间使用intent传递大量数据带来问题总结
转载:大飞 http://blog.csdn.net/rflyee/article/details/47441405 Activity之间使用Parcel传递大量数据产生的问题. Activity ...
- Android 使用全局变量传递数据
使用全局变量传递数据,所谓的全局变量类似于jee开发中的application变量.申明后,全局调用.只有当内存被清理后,才被销毁.否则一直可以调用. 还是使用点击一个button,传递一个数据到另一 ...
- activity之间參数传递&&获取activity返回值&&activity生命周期
Activity之间參数传递 A activity想将參数传给B activity时能够利用Intent将消息带过去 Intent intent = new Intent(this,BActivity ...
- android第一行代码-3.activity之间的调用跟数据传递
前面两节所有应用都是同一个activity中的,是时候讲activity之间交互的操作了,此后会涉及到intent这个概念,这也算一个新的里程碑开始. 主要内容包括intent的使用,以及activi ...
- 37.Activity之间的转换以及数据的传递(Intent)学习
Intent简介: 在一个Androi ...
- Android教程 -04 启动其它Activity,静态工厂设计模式传递数据
视频建议采用超清模式观看, 欢迎点击订阅我的优酷 意图 Intent 一个应用程序肯定不只有一个界面,如何切换到其它界面,只时候就需要启动其它的Activity.启动Activity有多种方式.我在这 ...
- 多个Activity之间的切换与数据交互
总结 两个activity之间切换我概括的分为两步: 1. 代码实现切换操作.2.配置中声明另外一个acitivity! 1. 代码实现切换操作 显示定义一个intent 对象,Intent 这个类的 ...
- [Android] Activity间切换,传递数据
前面照着android系统的裁剪图片的功能自己写了一个相似的工具.功能是大体上实现了,但留下了一个调用的问题:如何从我的程序调用这个裁剪工具,并且获得裁剪后的图片呢? 其实这个也很简单了,就是inte ...
- android使用全局变量传递数据
android中Application是用来保存全局变量的,在package创建的时候就存在了,到所有的activity都被destroy掉之后才会被释放掉.所以当我们需要全局变量的时候只要在appl ...
随机推荐
- vxworks 的 socket, thread, 信号量模型
http://www.vxdev.com/docs/vx55man/vxworks/netguide/c-sockets.html http://www.vxdev.com/docs/vx55man/ ...
- centos 解决error: rpmdbNextIterator问题 (转)
昨天重装RedHat4以后出现了下面这个问题 [root@RedHat4 ~]# rpm -qa |grep vimerror: rpmdbNextIterator: skipping h# ...
- python3 爬虫神器pyquery的使用实例之爬网站图片
PyQuery 可让你用 jQuery 的语法来对 xml 进行操作,这和 jQuery 十分类似.如果利用 lxml,pyquery 对 xml 和 html 的处理将更快. 如果对 jQuery ...
- Linux 最常用的20条命令
1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切 ...
- 命令查看java的class字节码文件
源代码: public class Math { public static void main(String[] args){ int a=1; int b=2; int c=(a+b)*10; } ...
- 19. Remove Nth Node From End of List(移除倒数第N的结点, 快慢指针)
Given a linked list, remove the nth node from the end of list and return its head. For example, Give ...
- Ubuntu&Linux系统出现文件系统只读Read-only file system 的快速解决方法
问题描述: 周末运行盘平台服务程序,周一来操作系统卡顿,主进程已退出,重启进程时提示Read-only file system:新建目录和其他chmod -R等等操作都提示Read-only file ...
- ThinkPHP语法总结
1, $data存放实体: $data['title'] = I('post.title'); // 标题 $data['content'] = I('post.content'); // 正文 $d ...
- SQL学习笔记之B+树
0x00 概述 要描述清楚B+树,得先了解二叉查找数,平衡二叉树. 0x01 二叉查找树 任意节点,它的左子树如果不为空,那么左子树上所有节点的值都小于根节点的值:任意节点,他的右子树如果不为空,那么 ...
- pxe基于虚拟机的自启动
环境系统:centos6.4 min版 虚拟机实现:提供的服务器ip为192.168.0.105,桥接 安装dhcp服务: yum -y install dhcp 配置dhcp服务,使能够成功启动: ...