android获取当前activity view,Android中如何通过View获取Activity
在开发过程中,我们会遇到下面情况:
Button button = (Button) findViewById(R.id.btn);
button.setOnClickListener(MainActivity.this);
if(button instanceof AppCompatButton){
Log.d("HHHHH","====button is appCompatButton====");
}
getActivityInfo(button);
public static void getActivityInfo(View view){
Context context=view.getContext();
Log.d("HHHHH","getActivityInfo-getContext="+context);
if(context instanceof Activity){
Activity activity= (Activity) context;
Log.d("HHHHH","getActivityInfo-name="+activity.getClass().getSimpleName());
}
}
结果如下:
从日志打印结果来看,Button变成了 AppCompatButton ,view.getContext得到的是TintContextWrapper,而不是Activity。
原因如下:
我们的activity继承自AppCompatActivity时,也就是引用的是v7包时,我们的button就自动转为AppCompatButton 了(具体的可以参见AppCompatButton 源码注释)。同时在AppCompatButton 中我们的Context就变成了图中第二个框中的TintContextWrapper了。
解决方案
原来在继承自AppCompatActivity时,Android底层会将我们应用的控件转为v7包中对应的控件,Context就被替换成了TintContextWrapper(他也继承自ContextWrapper)。所以我们可以通过如下代码获取想要的activity。
public static Activity getActivityFromView(View view) {
if (null != view) {
Context context = view.getContext();
while (context instanceof ContextWrapper) {
if (context instanceof Activity) {
return (Activity) context;
}
context = ((ContextWrapper) context).getBaseContext();
}
}
return null;
}
android获取当前activity view,Android中如何通过View获取Activity相关推荐
- Android获取view焦点方向,android 中获取当前焦点所在屏幕中的位置 view.getLocationOnScreen(location)...
final int[] location = new int[2]; view.getLocationOnScreen(location); final int[] location = new in ...
- Android源码—为什么onResume方法中不可以获取View宽高
前言 有一个经典的问题,我们在Activity的onCreate中可以获取View的宽高吗?onResume中呢? 对于这类八股问题,只要看过都能很容易得出答案:不能. 紧跟着追问一个,那为什么Vie ...
- android电脑文件列表不刷新,Android 利用RecyclerView.Adapter刷新列表中的单个view问题...
首先使用RecyclerView的adapter继承:RecyclerView.Adapter public class OrderListAdapter extends RecyclerView.A ...
- android service intent-filter,如何在permission中加入intent-filter过滤器获取NotificationListenerService权限...
现在要让我的app获取NotificationListenerService权限,我勾选了BIND_NOTIFICATION_LISTENER_SERVICE权限后,用native.js跳到ACTIO ...
- vue获取input的属性_vuejs 中如何优雅的获取 Input 值
原生 js 使用 getElementById 比较麻烦的地方 需要为元素设置 id 设置 id 之后,无法复用,因为一个页面中不能存在两个相同的 id 双向绑定 v-model 分两种情况 inpu ...
- java 相对路径获取_在java项目中通过相对路径获取资源的方式
1.可以通过 类名.class.getResource方法获取或者getSystemResource 2.可以通过当前线程 Thread.currentThread().getContextClass ...
- 使用java代码获取yml及properties文件中的内容,获取值
获取properties文件中的内容 最近做项目一些值需要放在配置文件中,一开始使用的是properties文件,我这里没有使用注解@Value获取. 获取: InputStream in = Mes ...
- Android V7包学习笔记更新中.....
关于V4 V7 V13 VX包介绍转自这里 1, Android Support V4, V7, V13是什么? 本质上就是三个java library. 2, 为什么要有support库? 如果在低 ...
- Android JNI开发读取asserts目录中文件的方法
Android Java层读取asserts目录中的文件: //获取asserts/test/目录下的所有文件名称 String test_path = "test"; int c ...
- Android如何跳转至目标Activity后按返回键不返回前一个Activity
有时候我们希望从一个activity离开后,按返回键不要再回去(比如点击退出登陆后跳转至登陆界面,这是点击返回键不希望返回到之前的退出登陆界面),那么我们需要把这个activity从栈区中去除.考虑在 ...
最新文章
- php5.5CURL图片上传废弃@
- Java 调用 Kotlin
- mysql truncate table命令使用总结
- 3.JDK和JRE和JVM的区别
- php什么是静态类,三.PHP静态类
- GNS3-ENSP对接实验
- 178页,四年图神经网络研究精华,图卷积网络作者Thomas Kipf博士论文公布
- tornado 坑集合
- 简单的动态网站java,Java实践:一个简单的动态数组实现
- 2022最新PHP开发的二级域名分发系统源码 附安装教程
- Bailian3754 字符环【字符串】
- 如何利用计算机技术检索文献,文献检索过程作业怎么写
- 2016北大叉院、北大信科保研经历
- 转载一篇过来人谈的大学期间关于课外学习的意见lt;出自左飞老师笔记gt;
- python word 表格宽度_RPA手把手——python-docx 设置 word 文档中表格格式
- 滴滴如何调度_怎么看待滴滴的调度小助手?_科技数码通
- 外汇天眼:Apple与MetaQuotes之争!谁是下一个Apple?谁会成下一个MT4/5?
- 1th matlab与遗传算法工具箱
- Edge兼容IE,Edge关闭弹窗阻止
- 关于是否读博士的思考 zz
热门文章
- android之普通蓝牙通信
- android之读取网络图片并显示
- android 微信布局 字体,【Android】底部Tab+ViewPager(仿微信界面)
- java路径不存在则创建文件夹_java实现文件夹不存在则创建
- 新冠疫情数据可视化python_【一点资讯】新冠疫情数据分析 | Python可视化工具看全国各地的新增趋势 www.yidianzixun.com...
- lay-verify=required 没生效_眼睛一闭一睁,20万没了!|侧翻|交通事故|半挂车|追尾...
- linux学习笔记:更换国内网易163 yum 源
- CentOS 7 使用ip addr查询不到IP
- Android日志工具Log的使用
- pb数据窗口怎么调用视图_大数据架构如何做到流批一体?