在开发过程中,我们会遇到下面情况:

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相关推荐

  1. Android获取view焦点方向,android 中获取当前焦点所在屏幕中的位置 view.getLocationOnScreen(location)...

    final int[] location = new int[2]; view.getLocationOnScreen(location); final int[] location = new in ...

  2. Android源码—为什么onResume方法中不可以获取View宽高

    前言 有一个经典的问题,我们在Activity的onCreate中可以获取View的宽高吗?onResume中呢? 对于这类八股问题,只要看过都能很容易得出答案:不能. 紧跟着追问一个,那为什么Vie ...

  3. android电脑文件列表不刷新,Android 利用RecyclerView.Adapter刷新列表中的单个view问题...

    首先使用RecyclerView的adapter继承:RecyclerView.Adapter public class OrderListAdapter extends RecyclerView.A ...

  4. android service intent-filter,如何在permission中加入intent-filter过滤器获取NotificationListenerService权限...

    现在要让我的app获取NotificationListenerService权限,我勾选了BIND_NOTIFICATION_LISTENER_SERVICE权限后,用native.js跳到ACTIO ...

  5. vue获取input的属性_vuejs 中如何优雅的获取 Input 值

    原生 js 使用 getElementById 比较麻烦的地方 需要为元素设置 id 设置 id 之后,无法复用,因为一个页面中不能存在两个相同的 id 双向绑定 v-model 分两种情况 inpu ...

  6. java 相对路径获取_在java项目中通过相对路径获取资源的方式

    1.可以通过 类名.class.getResource方法获取或者getSystemResource 2.可以通过当前线程 Thread.currentThread().getContextClass ...

  7. 使用java代码获取yml及properties文件中的内容,获取值

    获取properties文件中的内容 最近做项目一些值需要放在配置文件中,一开始使用的是properties文件,我这里没有使用注解@Value获取. 获取: InputStream in = Mes ...

  8. Android V7包学习笔记更新中.....

    关于V4 V7 V13 VX包介绍转自这里 1, Android Support V4, V7, V13是什么? 本质上就是三个java library. 2, 为什么要有support库? 如果在低 ...

  9. Android JNI开发读取asserts目录中文件的方法

    Android Java层读取asserts目录中的文件: //获取asserts/test/目录下的所有文件名称 String test_path = "test"; int c ...

  10. Android如何跳转至目标Activity后按返回键不返回前一个Activity

    有时候我们希望从一个activity离开后,按返回键不要再回去(比如点击退出登陆后跳转至登陆界面,这是点击返回键不希望返回到之前的退出登陆界面),那么我们需要把这个activity从栈区中去除.考虑在 ...

最新文章

  1. php5.5CURL图片上传废弃@
  2. Java 调用 Kotlin
  3. mysql truncate table命令使用总结
  4. 3.JDK和JRE和JVM的区别
  5. php什么是静态类,三.PHP静态类
  6. GNS3-ENSP对接实验
  7. 178页,四年图神经网络研究精华,图卷积网络作者Thomas Kipf博士论文公布
  8. tornado 坑集合
  9. 简单的动态网站java,Java实践:一个简单的动态数组实现
  10. 2022最新PHP开发的二级域名分发系统源码 附安装教程
  11. Bailian3754 字符环【字符串】
  12. 如何利用计算机技术检索文献,文献检索过程作业怎么写
  13. 2016北大叉院、北大信科保研经历
  14. 转载一篇过来人谈的大学期间关于课外学习的意见lt;出自左飞老师笔记gt;
  15. python word 表格宽度_RPA手把手——python-docx 设置 word 文档中表格格式
  16. 滴滴如何调度_怎么看待滴滴的调度小助手?_科技数码通
  17. 外汇天眼:Apple与MetaQuotes之争!谁是下一个Apple?谁会成下一个MT4/5?
  18. 1th matlab与遗传算法工具箱
  19. Edge兼容IE,Edge关闭弹窗阻止
  20. 关于是否读博士的思考 zz

热门文章

  1. android之普通蓝牙通信
  2. android之读取网络图片并显示
  3. android 微信布局 字体,【Android】底部Tab+ViewPager(仿微信界面)
  4. java路径不存在则创建文件夹_java实现文件夹不存在则创建
  5. 新冠疫情数据可视化python_【一点资讯】新冠疫情数据分析 | Python可视化工具看全国各地的新增趋势 www.yidianzixun.com...
  6. lay-verify=required 没生效_眼睛一闭一睁,20万没了!|侧翻|交通事故|半挂车|追尾...
  7. linux学习笔记:更换国内网易163 yum 源
  8. CentOS 7 使用ip addr查询不到IP
  9. Android日志工具Log的使用
  10. pb数据窗口怎么调用视图_大数据架构如何做到流批一体?