Android笔记(一):this 的表示范围和 Context
this 的表示范围
this 指的是它所在的直接所在的类。
例如:
public class MyClass{
int num;
public MyClass(int num){
this.num = num;
}
}
在初始化中,传入的变量名与 MyClass 类的类变量名一致。如果直接:
num = num;
这样是得不到预期的效果的。
这里的 this.num 可以理解为 MyClass.num ,但又不是 MyClass.num 。因为程序在运行的时候,会有一个 MyClass 类的实例对象。这个 this 指的是实例化的对象,而 MyClass.num 则指的是静态的类。
Android 中,在给 MainActivity 类的按钮设置点击事件的时候:
btnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"this is a toast",Toast.LENGTH_SHORT).show();
}
});
这里用到了 MainActivity.this ,如果直接传入 this 则是错的。
但同时你又会发现,如果你不是在这个new View.OnClickListener()
里面写 Toast ,就不用写成MainActivity.this
,而是直接写成:
Toast.makeText(this,"this is another toast",Toast.LENGTH_SHORT).show();
怎么会有两种写法?
第一种写法是因为这里的new View.OnClickListener()
创建了一个对象,View.OnClickListener()
是一个接口,那么自然就得有一个类来实现这个接口,这里是一个匿名类。也就是说,第一种写法是在 MainActivity 类的内部的一个类里面写的 Toast 。那么如果直接使用 this ,这时它指向的是这个匿名类,因为 this 的直接所在类是这个匿名类。
第二种写法是因为这是直接写在 MainActivity 这个类的方法里面的,这行代码没有再被一个类所包含, MainActivity 是它的直接上层类。
传入 Activity 而不是 Context ?
到这里还有一个疑问,那就是 Toast 类的这个 makeText 所要求的参数:
public static Toast makeText(Context context, CharSequence text, @Duration int duration)
这里接收的是 Context ,而我们传入的是 Activity 。
在 Activity官方文档 可以看到:
Activity 是 Context 的间接子类,所以可以直接传入 Activity 。
顺便,我们再来看看我们经常看到的一个AppCompatActivity
类,也就是我们每次创建新的 Activity 的时候,Android Studio 自动帮我们继承的类。我以前曾经很好奇:为什么不是直接继承 Activity 类?
这个 AppCompatActivity 是 Activity 的间接子类!它是一种向下兼容的 Activity ,可以将在 Android 2.1系统之后 Activity 增加的内容可以在 Android 2.1上正确执行。只要你编写程序的时候,在build.gradle
的dependencies
里添加远程依赖库,例如:
compile 'com.android.support:appcompat-v7:25.1.0'
这个通常是 Android Studio 自动添加的,我们只需要放心的使用 AppCompatActivity 就行了。
Android笔记(一):this 的表示范围和 Context的更多相关文章
- Android笔记——Android中数据的存储方式(二)
我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...
- Android笔记:触摸事件的分析与总结----TouchEvent处理机制
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://glblong.blog.51cto.com/3058613/1559320 ...
- Android 笔记之 R 文件
Android笔记之R文件 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: red; te ...
- Android 笔记之 Android 系统架构
Android笔记之Android系统架构 h2{ color: #4abcde; } a{ color: blue; text-decoration: none; } a:hover{ color: ...
- Android笔记之使用Glide加载网络图片、下载图片
Glide简介 不想说太多,真的很方便:P)可以节省我不少时间 GitHub地址:https://github.com/bumptech/glide 加载网络图片到ImageView Glide.wi ...
- Android笔记--View绘制流程源码分析(二)
Android笔记--View绘制流程源码分析二 通过上一篇View绘制流程源码分析一可以知晓整个绘制流程之前,在activity启动过程中: Window的建立(activit.attach生成), ...
- Android笔记--View绘制流程源码分析(一)
Android笔记--View绘制流程源码分析 View绘制之前框架流程分析 View绘制的分析始终是离不开Activity及其内部的Window的.在Activity的源码启动流程中,一并包含 着A ...
- Android笔记--自定义控件仿遥控器的圆形上下左右OK圆盘按钮
原文:Android笔记--自定义控件仿遥控器的圆形上下左右OK圆盘按钮 上面就是几张预览图!代码在最底下 主要就两个步骤,画图.监听点击 1.整个控件基本上是一步步画出来的,重写onDraw方法开始 ...
- 我的Android笔记--我对安卓系统的一些了解
敲了这么长时间代码,记录一下我对Android的一些概念,下面大部分内容来源自网络资料和官方给的文档. 1,Android操作系统的核心属于Linux的一个分支,具有典型的Linux调度和功能 ...
- Android笔记——Android中数据的存储方式(三)
Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存 ...
随机推荐
- inline-block的间距问题
张鑫旭的博客有提到,解决的方法有很多,先贴下,回头再做整理. http://www.zhangxinxu.com/wordpress/2012/04/inline-block-space-remove ...
- JMS学习(三)ActiveMQ Message Persistence
1,JMS规范支持两种类型的消息传递:persistent and non-persistent.ActiveMQ在支持这两种类型的传递方式时,还支持消息的恢复.中间状态的消息(message are ...
- python垃圾回收二
由于循环引用的存在,我们在删除了a跟b之后,引用计数是1,这样,现有的垃圾回收机制是永远不可能把她们删除了.他们将永远存在于内存中. 我们当然不能对这种情况置之不理,于是,我们又添加了两种新的回收机制 ...
- HTTP协议之响应头Date与Age
HTTP没有为用户提供一种手段来区分响应是缓存命中的,还是访问原始服务器得到的.客户端有一种方法能判断响应是否来自缓存,就是使用Date首部.将响应中Date首部的值与当前时间进行比较,如果响应中的日 ...
- How to become a successful bug bounty hunter
出处:https://www.hackerone.com/blog/become-a-successful-bug-bounty-hunter 如果你梦想成为赏金猎人,你的梦想就会成真 - 不要把你的 ...
- 『Matplotlib』数据可视化专项
一.相关知识 官网介绍 matplotlib API 相关博客 matplotlib绘图基础 漂亮插图demo 使用seaborn绘制漂亮的热度图 fig, ax = plt.subplots(2,2 ...
- 2018-11-3& maven
https://www.cnblogs.com/clsn/p/7944116.html#auto_id_10 http://www.runoob.com/maven/maven-creating-pr ...
- Python_oldboy_自动化运维之路_线程,进程,协程(十一)
本节内容: 线程 进程 协程 IO多路复用 自定义异步非阻塞的框架 线程和进程的介绍: 举个例子,拿甄嬛传举列线程和进程的关系: 总结:1.工作最小单元是线程,进程说白了就是提供资源的 2.一个应用程 ...
- GET和POST两种基本请求方法的区别(转载)
get与post请求的区别: 通常回答: GET在浏览器回退时是无害的,而POST会再次提交请求. GET产生的URL地址可以被Bookmark,而POST不可以. GET请求会被浏览器主动cache ...
- kafka脚本
为了便于使用,kafka提供了比较强大的Tools,把经常需要使用的整理一下 开关kafka Server bin/kafka-server-start.sh config/server.proper ...