关于自定义adapter使用getApplicationContext()影响主题
最近弄了一个东西,listview+switch构成界面
关于android自定义adapter,继承自baseadapter,发现界面的switch开关主题变了想要的是浅色的主题,但是却发现变成了深色,但是检查无数遍,排除了所有可能影响主题的代码或者布局,依旧没有收获,最后发现,因为传递的一个参数居然影响到了switch主题,
infater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
在自定义的adapter构造函数里面去获取布局管理器,然后在加载布局的时候调用传进的参数是
ApplicationInfoAdapter adapter = new ApplicationInfoAdapter(getApplicationContext(), dataList);
发现getApplicationContext()传进来直接影响了主题,因为geApplicationContext是整个应用的上下文,它本身包含默认的主题,而想要的是activity的一个自己的主题。
应该使用自身的context。
ApplicationInfoAdapter adapter = new ApplicationInfoAdapter(this, dataList);
这样就对了。switch的背景色变成了浅色。ok搞定。
参考文章:http://hi.baidu.com/lifj_hogan/item/38c0b8812256e15927ebd9fe
getApplicationContext()
返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁。
Activity.this 返回当前activity的上下文,生命周期只是它所在的Activity,activity 摧毁他就摧毁
getBaseContext()
返回由构造函数指定或setBaseContext()设置的上下文。
this.getApplicationContext()
获取的是这个应用程序的Context(associated with the Applicaiton),Activity.this获取的是这个Activity的Context,这两者的生命周期是不同的,前者的生命周期是整个应用的创建到销毁,后者的生命周期只是它所在的Activity(创建到销毁)。
一定要搞清楚生命周期,比如有一个全局的数据操作类,用到了context, 这个时候就要用到getApplicationContext, 而不是用ACtivity, 这就保证了数据库的操作与activity无关。
基本上来说呢,应用程序Context是和应用程序关联的,并且在程序的生命周期内,总是一样的。但是,活动Context是关联在某个活动上的,随着Activity的销毁(比如横竖屏切换等情况),这个Context也会被销毁N多次。不要使用getBaseContext(),只使用你有的Context。在可能的情况下使用全局应用程序Context.
关于自定义adapter使用getApplicationContext()影响主题的更多相关文章
- 关于自定义Adapter实现ListView的使用
以下为使用BaseAdapter作扩展,自定义Adapter来使用ListView控件: 需要注意以下的几点: 1.自定义Adapter时,需要特别注意Adapter类中getView()方法覆盖,注 ...
- [Android] Android RecycleView和ListView 自定义Adapter封装类
在网上查看了很多对应 Android RecycleView和ListView 自定义Adapter封装类 的文章,主要存在几个问题: 一).网上代码一大抄,复制来复制去,大部分都运行不起来,或者 格 ...
- 自定义Adapter为什么会重复多轮调用getView?——原来是ListView.onMeasure在作祟
相信很多人在使用自定义Adapter的时候都遇到这样的问题: 假设Adapter数据源中只有30个Item,理论上每显示一个新的Item的时候就会调用一次getView,均显示一次的话是要调用getV ...
- Android学习----自定义Adapter实现ListView
前言: 对于ListView而言,自定义的Adapter对于显示复杂的界面有很大的灵活性 .使用自定义的Adapter需要继承BaseAdapter,然后重写getCount(),getView(), ...
- Android中利用ViewHolder优化自定义Adapter的典型写法
利用ViewHolder优化自定义Adapter的典型写法 最近写Adapter写得多了,慢慢就熟悉了. 用ViewHolder,主要是进行一些性能优化,减少一些不必要的重复操作.(WXD同学教我的. ...
- android代码优化----ListView中自定义adapter的封装(ListView的模板写法)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现) .
今天学习了Spinner组件,使用Spinner相当于从下拉列表中选择项目,下面演示一下Spinner的使用(分别使用ArrayAdapter和自定义Adapter实现) (一):使用ArrayAda ...
- Android ListView 自定义 Adapter
自定义Adapter类 public class ListViewAdapter extends BaseAdapter { private static final String TAG = Mai ...
- android 自定义adapter和线程结合 + ListView中按钮滑动后状态丢失解决办法
adapter+线程 1.很多时候自定义adapter的数据都是来源于服务器的,所以在获取服务器的时候就需要异步获取,这里就需要开线程了(线程池)去获取服务器的数据了.但这样有的时候adapter的中 ...
随机推荐
- poj 3694 Network(双连通分量)
题目:http://poj.org/problem?id=3694 #include <iostream> #include <cstring> #include <cs ...
- poj 2185 (KMP)
完全不会啊…… 附一份题解:http://blog.sina.com.cn/s/blog_69c3f0410100tyjl.html var i,j,k,r,c,x:longint; ch:..,.. ...
- poj 2503 快排+二分
..] of string; i,n,l,r,mid:longint; s:string; procedure qsort(h,l:longint); var i,j:longint; temp,m: ...
- mysql 触发器学习(可以将mysql数据同步到redis)
1. 一个简单的例子 1.1. 创建表: create table t(s1 integer); 1.2. 触发器: delimiter | create trigger t_trigger befo ...
- 【转】AngularJS路由和模板
1. AngularJS路由介绍 AngularJS路由功能是一个纯前端的解决方案,与我们熟悉的后台路由不太一样.后台路由,通过不同的URL会路由到不同的控制器上(controller),再渲染(re ...
- 编程解读 + DOS搞笑开机GIF
- Leetcode OJ : Compare Version Numbers Python solution
Total Accepted: 12400 Total Submissions: 83230 Compare two version numbers version1 and version2 ...
- V&View更新
这几天一直在做V&View的更新工作,这次的更新是质的变化,表面界面变化不大,可是内部确有着翻天覆地的改变. 这几天我主要做了一下几件事: 1. 重新构思了vview的文章发布形式,之前使用k ...
- HDU-1402 A * B Problem Plus FFT(快速傅立叶变化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1402 一般的的大数乘法都是直接模拟乘法演算过程,复杂度O(n^2),对于这题来说会超时.乘法的过程基本 ...
- 创建本地CM 离线服务器
一.包管理工具及CentOS的yum 1.包管理工具如何发现可以用的包 包管理工具依赖一系列软件源,工具下载源的信息存储在配置文件中,其位置随某包管理工具不同而变化 使用yum的RedHat/Cent ...