(四)Android中Context的理解与使用
一、Context的作用
Context可用于访问全局资源.
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);tv = new TextView(MainActivity.this);
tv.setText("钱龙");
tv.setText(R.string.hello_world);
tv.setText(getResources().getText(R.string.hello_world)); //访问全局资源
setContentView(tv);ImageView iv=new ImageView(this);
iv.setImageResource(R.mipmap.ic_launcher); //访问全局资源
setContentView(iv); }
}
二、Application的用途
公共的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView" /> <EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
/> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存"
android:id="@+id/btnSave" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
AndroidManifest.xml文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.shiyanshi.learncontext" > <application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >?
<activity
android:name=".MainActivity"
android:label="LearnContext" > <!--安装的应用程序的名称-->
<intent-filter> <!--指定该activity为启动的activity-->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Main2Aty"
android:label="Main2">
<intent-filter>
<action android:name="android.intent.action.MAIN"/> <!--必须指定为MAIN才会安装两个应用程序-->
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter> </activity>
</application> </manifest>
1.新建一个Application类,在其中设置需要被程序访问的公共资源,此处为一个字符串
public class App extends Application {
private String stringData="default"; public void setStringData(String stringData) {
this.stringData = stringData;
} public String getStringData() {
return stringData;
}
}
2.然后在AndroidManifest.xml文件中设置application的name属性为新建的类
<application
android:name=".App">
3.新建一个Activity,并且使该Activity也成为一个启动Activity(即在系统中安装两个启动图标),注意要在AndroidManifest.xml文件中设置Activity的属性如上面的Main2Aty的设置,
注意过滤器中action的name必须设置为android.intent.action.MAIN且category的name必须设置为android.intent.category.LAUNCHER,只有这样系统中才会显示有两个启动图标。
public class Main2Aty extends Activity {
private TextView textView;
private EditText editText; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_common);
textView= (TextView) findViewById(R.id.textView);
editText= (EditText) findViewById(R.id.editText);
textView.setText(getApp().getStringData());
findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getApp().setStringData(editText.getText().toString());
textView.setText(getApp().getStringData());
}
});
} App getApp()
{
return (App) getApplicationContext();
}
}
4.主Activity
public class MainActivity extends Activity {
private TextView textView;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_common);
textView= (TextView) findViewById(R.id.textView);
editText= (EditText) findViewById(R.id.editText);
textView.setText(getApp().getStringData());
findViewById(R.id.btnSave).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getApp().setStringData(editText.getText().toString());
textView.setText(getApp().getStringData());
}
});
}
App getApp()
{
return (App) getApplicationContext();
}
}
5.注意3,4中是通过getApplicationContext()来获取自己新建的Application的子类的,然后再调用其中的方法就可以访问全局资源了。
三、Application的生命周期
Application的重载函数,有如下几个,onCreate在Activity的onCreate之前执行,并且每一个Activity执行之前都要执行Application的onCreate,因此可以很方便的在其中设置全局初始化信息。
onTerminate,onLowMemory,onTrimMemory一般不会被执行。
@Override
public void onCreate() {
super.onCreate();
System.out.println("App onCreate");
} @Override
public void onTerminate() {
super.onTerminate();
} @Override
public void onLowMemory() {
super.onLowMemory();
} @Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
}
(四)Android中Context的理解与使用的更多相关文章
- Android中Context的理解及使用(一)——Context的作用
Context的作用:用来访问全局信息的接口,通过Context进行资源的访问. 1.Context获取字符串资源: public class MainActivity extends AppComp ...
- Android中Context的理解及使用(二)——Application的用途和生命周期
实现数据共享功能: 多个Activity里面,可以使用Application来实现数据的共享,因为对于同一个应用程序来说,Application是唯一的. 1.实现全局共享的数据App.java继承自 ...
- Android中Context详解 ---- 你所不知道的Context(转)
Android中Context详解 ---- 你所不知道的Context(转) 本文出处 :http://b ...
- Android中Context的总结及其用法
在android中我们经常遇到这样的情况,在创建一个对象的时候往往需要传递一个this参数,比如:语句 MyView mView = new MyView(this),要求传递一个this参数,这个t ...
- Android中一个经典理解误区的剖析
今天,在Q群中有网友(@广州-包晴天)发出了网上的一个相对经典的问题,问题具体见下图. 本来是无意写此文的,但群里多个网友热情不好推却,于是,撰此文予以分析. 从这个问题的陈述中,我们发现,提问者明显 ...
- Android中Context详解
大家好, 今天给大家介绍下我们在应用开发中最熟悉而陌生的朋友-----Context类 ,说它熟悉,是应为我们在开发中时刻的在与它打交道,例如:Service.BroadcastReceiver.A ...
- Android中Context详解 ---- 你所不知道的Context
转自:http://blog.csdn.net/qinjuning/article/details/7310620Android中Context详解 ---- 你所不知道的Context 大家好, ...
- 转:Android中Context详解 ---- 你所不知道的Context
转:http://blog.csdn.net/qinjuning/article/details/7310620 转:http://blog.csdn.net/lmj623565791/article ...
- Android中Context具体解释 ---- 你所不知道的Context
...
随机推荐
- 购买DigtalOcean VPS 以及 连接Linux
1.DigtalOcean简介 digitalocean是一家成立于2012年的总部设置在纽约的云主机商家,眼下在荷兰的阿姆斯特丹(AMS1.AMS2).美国的纽约(NYC1.NYC2)和旧金山(SF ...
- <源代码>FTPclient追加方式上传自己定义信息
实现功能:向FTPserver以追加方式上传自己定义信息(例程中为:2014-10-08 13:47:15 test.) 源代码下载(免积分):http://download.csdn.net/det ...
- 对‘pthread_create’未定义的引用
由于pthread库不是Linux系统默认的库,连接时需要使用库libpthread.a,所以在使用pthread_create创建线程时,在编译中要加-l pthread参数: gcc exampl ...
- Oozie — What Why and How
Oozie是什么? Oozie最初是Yahoo!为Hadoop开发的一个工作流调度器,一个工作流有多个Job组成.它允许用户提交由多个Job组成的工作流配置文件,这些Job既可以顺序执行,也可以并行执 ...
- 手工启动oracle EM
在WINDOWS上安完ORACLE发现没有EM没有启动,在网上找了一个手工启动的方法,试了,在WIN下同样可用. 人家的原文如下: oracle@linux:~> sqlplus/ as sys ...
- js new Date()
1.Date 对象用于处理日期和时间.创建 Date 对象的语法:var myDate=new Date()Date 对象会自动把当前日期和时间保存为其初始值.2.参数形式有以下5种: new Dat ...
- HTML5之新增标签用途及应用场景
把自己的学习笔记整理一下,今天是HTML5第一篇,明天是css3选择器,给自己提个醒!哈哈 新的页面结构以及宽松的语法规范,标签可以不用闭合,可以省略head,body等标签 <!DOCTYPE ...
- shopnc数据库 批量修改商品价格
1.商品价格统一上调50 2.商品价格个别上调50 UPDATE `nc_goods` SET `goods_price` = `goods_price` +50 where goods_id!=10 ...
- 安装apk到虚拟的device
adb device 显示你的设备 adb install apk包
- Linux下MySQL安装及命令使用
先rpm -qa mysql 查看是否安装 yum list |grep mysql 查看MySQL的一些包 yum install -y mysql-server mysql mysql-devel ...