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 ...
随机推荐
- Spark如何写入HBase/Redis/MySQL/Kafka
一些概念 一个partition 对应一个task,一个task 必定存在于一个Executor,一个Executor 对应一个JVM. Partition 是一个可迭代数据集合 Task 本质是作用 ...
- 记录:python读取excel文件
由于最近老是用到python读取excel文件,所以特意记录一下python读取excel文件的大体框架. 库:xlrd(读),直接pip安装即可.想要写excel文件的话,安装xlwd库即可,也是直 ...
- ios极光推送快速集成教程
内容中包含 base64string 图片造成字符过多,拒绝显示
- 成员函数查找[条款24]---《C++必知必会》
调用一个成员函数,涉及三个步骤:第一步,编译器查找函数的名字:第二部,从可用候选者中选择最佳匹配函数:第三步,检查是否具有访问该函数的权限. #include<iostream> usin ...
- WCF学习记录(一)
在这里先简单记录下WCF配置的过程,关于WCF详解,下次再做具体描述. 1. Contract及其实现 a. [ServiceContract(Namespace = "http://www ...
- 微信小程序组件switch
表单组件switch:官方文档 Demo Code: Page({ switch1Change: function (e){ console.log('switch1 发生 change 事件,携带值 ...
- 2017浙江省赛 B - Problem Preparation ZOJ - 3959
地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3959 题目: It's time to prepare the pr ...
- JAVA BIO与NIO、AIO的区别
IO的方式通常分为几种,同步阻塞的BIO.同步非阻塞的NIO.异步非阻塞的AIO. 一.BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSock ...
- python requests的使用说明
#GET参数实例 requests.get('http://www.dict.baidu.com/s', params={'wd': 'python'}) #或 url = 'http://www.b ...
- Cisco 路由交换 常用查询语句
基本信息查询语句 #查看全配置信息 #show running-configure #查看vlan信息 #show vlan brief #查看物理直连信息 #show cdp neighbors d ...