Android基础知识—Context理解及使用
Context是Android中一个非常重要的概念,用于访问全局信息,几乎所有的基础组件都继承自 Context,理解 Context 对于学习 Android 四大基本组件非常有帮助。
1. Context作用
新建一个LearnContext工程,看如何通过Context来进行资源的访问。
public class MainActivity extends AppCompatActivity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(MainActivity.this); //可只写this
// tv.setText("Hello Android");
tv.setText(R.string.app_name); //利用资源的id传入一个字符串
System.out.println(getResources().getText(R.string.app_name)); // 当前的avtivity是一个Context,所以直接通过getResources()获取资源
setContentView(tv);
}
}
除了可以获取字符串资源外,它还可以获取只要工程文件里边存在任意类型的资源。比如说图片资源:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ImageView iv = new ImageView(this);
iv.setImageResource(R.mipmap.ic_launcher);
setContentView(iv);
}
}
这样运行就会看到安卓机器人的图片了
Context作用:访问全局信息的接口,比如全局的字符串,图片资源等。
2. Application用途
多个组件之间数据共享,前面了解了Context可以作为全局信息的桥梁。
新建一个类App,让它继承至Application,配置AndroidMainfset:
<application
android:name=".App" //new add
通过这种方式,我们就自定义了 Android 的 Application 。而 Application 才是一个真正的全局上下文对象。
App.java
public class App extends Application {
private String textData = "default";
public void setTextData(String textData) {
this.textData = textData;
}
public String getTextData() {
return textData;
}
}
然后新建一个类 Main2 继承至 Activity,重写 onCreate()。添加注册信息:
把这个Activity也设置为启动的。
<activity
android:name=".Main2"
android:label="Main2"> //同时将第一个Aty的label设为Main1。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
运行发现手机已经装了MainActivity和Main2,打开MainActivity为图片,打开Main2为空白。
接下来在layout文件夹中创建 main1.xml 和 main2.xml ,并绑定视图。
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
}
}
Main2.java
public class Main2 extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
}
}
回到 main1.xml,拖进一个 PlainTextView,PlainText 和 Button:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/textView" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_gravity="center_horizontal" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存"
android:id="@+id/btnSaveData" />
拷贝一份到main2.xml使用相同布局,去到MainActivity.java:
public class MainActivity extends AppCompatActivity {
private TextView textView;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
textView = (TextView) findViewById(R.id.textView); //获取资源
editText = (EditText) findViewById(R.id.editText);
textView.setText("共享的数据是:"+getApp().getTextData());
findViewById(R.id.btnSaveData).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//保存时获取Application,类型为自定义的App,获取信息保存到全局的Context里边
((App)getApplicationContext()).setTextData(editText.getText().toString());
textView.setText("共享的数据是:"+getApp().getTextData());
}
});
}
public App getApp(){
return (App) getApplicationContext();
}
}
运行可以看到共享数据是 default,输入 wshlin ,点保存,可以看到共享数据变为 wshlin 。退出打开Main2,看到共享的数据为 wshlin,修改为kkk,退出打开Main,发现共享数据为 kkk。
也就是说,在多个 activity 里边,我们可以使用 Application 来进行数据的共享。因为 Application 对于同一个应用来说是唯一的。
====================================转载========================
作者:wshlin
链接:https://www.jianshu.com/p/cba902e68481
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Android基础知识—Context理解及使用的更多相关文章
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- Android基础知识巩固:关于PendingIntent和广播
平时使用广播的场合比较多,但细节的东西,看过了也没有总结,以至于某些场合有小问题,还是要把原理和属性搞清楚才能运用自如. 其实也是自己比较懒,先看别人的blog,有个概念再去官网看英文的能好理解一些. ...
- Android基础知识(一)
前言 前言 从软件测试最终目的发现问题缺陷来看,Findyou比较认同一个观念,测试的能力大致可以划分成三个能力层次:发现问题.定位问题.预防问题.有机会探讨一下这个分类. 发现问题各种方式方法,比如 ...
- android开发学习---linux下开发环境的搭建&& android基础知识介绍
一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- android基础知识:SharedPreferences和PreferenceActivity
1.android文件存储 对Android系统了解的都知道,Android系统有四种基本的数据保存方法,一是SharedPreference,二是文件,三是SQLite,四是ContentProvi ...
- Android基础知识学习
IPC (Inter-Process Communication) 意思是: 进程间的通信,是指两个进程之间进行数据交换的过程. Android中如何开启多进程呢? 只需要给四大组件(Activit ...
- C#基础知识之理解Cookie和Session机制
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- Android基础知识总结
四大组件之一活动 活动状态 运行状态:活动处于栈顶 暂停状态:活动不处于栈顶,但仍然可见 停止状态:完全不可见 销毁状态:离开返回栈 生存期 onCreate() onStart():不可见到可见调用 ...
- Android基础知识-1
1.Android的Activity任务栈 在Android的系统中,在APP运行时每个APP都会默认有一个任务栈,任务栈的名称以APP的包名命名.任务栈是一中先进后出的结构,APP中每一个调用的Ac ...
随机推荐
- ajax-jq
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- c++ exit() 函数
函数用法 编辑 函数名: exit() 所在头文件:stdlib.h(如果是”VC6.0“的话头文件为:windows.h) 功 能: 关闭所有文件,终止正在执行的进程. exit(0)表示正常退出, ...
- 《DNS攻击防范科普系列1》—你的DNS服务器真的安全么?
DNS服务器,即域名服务器,它作为域名和IP地址之间的桥梁,在互联网访问中,起到至关重要的作用.每一个互联网上的域名,背后都至少有一个对应的DNS.对于一个企业来说,如果你的DNS服务器因为攻击而无法 ...
- Vue的data选项使用注意
使用组件时,大多数可以传入到Vue构造器中的选项可以在Vue extend()或 Vue.component() 中注册组件时使用,但是有一个重要的前提:data必须是函数 .在 var vm = n ...
- c语言NULL和0区别及NULL详解
先看下面一段代码输出什么: #include<stdo.h> int main() { int *p=NULL; printf("%s",p); } 输出<n ...
- [14]APUE:API for Mysql
库:/usr/lib64/libmysqlclient.so.#.#... 头文件:/usr/lib64/mysql/mysql.h 一.建立连接 MYSQL *mysql_init(MYSQL *) ...
- 剑指offer——34之字打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 题解: 与上道题没区别,就是在存入数据时 ...
- Quartz2作业监听
在本教程中,我们将展示/介绍如何创建一个JobListener,跟踪运行工作状态在作业完成等. P.S 这个例子是Quartz 2.1.5 1. Quartz 作业 作业 - 用于打印一个简单的信息, ...
- 《转》python对象
http://www.cnblogs.com/BeginMan/p/3160044.html 一.学习目录 1.pyhton对象 2.python类型 3.类型操作符与内建函数 4.类型工厂函数 5. ...
- 【2018ACM/ICPC网络赛】沈阳赛区
这次网络赛没有打.生病了去医院了..尴尬.晚上回来才看了题补简单题. K Supreme Number 题目链接:https://nanti.jisuanke.com/t/31452 题意:输入一个 ...