最近弄了一个东西,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://stackoverflow.com/questions/1026973/android-whats-the-difference-between-the-various-methods-to-get-a-context

参考文章: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()影响主题的更多相关文章

  1. 关于自定义Adapter实现ListView的使用

    以下为使用BaseAdapter作扩展,自定义Adapter来使用ListView控件: 需要注意以下的几点: 1.自定义Adapter时,需要特别注意Adapter类中getView()方法覆盖,注 ...

  2. [Android] Android RecycleView和ListView 自定义Adapter封装类

    在网上查看了很多对应 Android RecycleView和ListView 自定义Adapter封装类 的文章,主要存在几个问题: 一).网上代码一大抄,复制来复制去,大部分都运行不起来,或者 格 ...

  3. 自定义Adapter为什么会重复多轮调用getView?——原来是ListView.onMeasure在作祟

    相信很多人在使用自定义Adapter的时候都遇到这样的问题: 假设Adapter数据源中只有30个Item,理论上每显示一个新的Item的时候就会调用一次getView,均显示一次的话是要调用getV ...

  4. Android学习----自定义Adapter实现ListView

    前言: 对于ListView而言,自定义的Adapter对于显示复杂的界面有很大的灵活性 .使用自定义的Adapter需要继承BaseAdapter,然后重写getCount(),getView(), ...

  5. Android中利用ViewHolder优化自定义Adapter的典型写法

    利用ViewHolder优化自定义Adapter的典型写法 最近写Adapter写得多了,慢慢就熟悉了. 用ViewHolder,主要是进行一些性能优化,减少一些不必要的重复操作.(WXD同学教我的. ...

  6. android代码优化----ListView中自定义adapter的封装(ListView的模板写法)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现) .

    今天学习了Spinner组件,使用Spinner相当于从下拉列表中选择项目,下面演示一下Spinner的使用(分别使用ArrayAdapter和自定义Adapter实现) (一):使用ArrayAda ...

  8. Android ListView 自定义 Adapter

    自定义Adapter类 public class ListViewAdapter extends BaseAdapter { private static final String TAG = Mai ...

  9. android 自定义adapter和线程结合 + ListView中按钮滑动后状态丢失解决办法

    adapter+线程 1.很多时候自定义adapter的数据都是来源于服务器的,所以在获取服务器的时候就需要异步获取,这里就需要开线程了(线程池)去获取服务器的数据了.但这样有的时候adapter的中 ...

随机推荐

  1. js设置datagriad的行移动

    //                    ,//                formatter: function(value,row,index){//                    ...

  2. Unity3D集成SVN进行版本控制

    首先,AssetServer确实很好用,Unity内部集成的管理界面,操作很简单,提交冲突的后还可以进行文件比对.但学习使用过程中,发现文件体积较大的项目文件目录(600M),我提交不上去,会返回没有 ...

  3. 重装sql server2008数据库安装不上原因

    因为注册表已经存在了sql server的信息,所以重新安装时需要删除注册表的一些信息 打开注册表:regedit 删除 HKEY_LOCAL_MACHINE\system/CurrentContro ...

  4. POJ 1273 (基础最大流) Drainage Ditches

    虽然算法还没有理解透,但以及迫不及待地想要A道题了. 非常裸的最大流,试试lrj的模板练练手. #include <cstdio> #include <cstring> #in ...

  5. 自适应的CSS代码片段(常用)

    /* Smartphones (portrait and landscape) ----------- */ @media only screen and (min-device-width : 32 ...

  6. JPA简单知识

    ,JPA(Java Persistence API):通过注解或XML描述对象--关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA是一套规范,不是某个ORM产品,它主要包括以下3方面的 ...

  7. 关于SQL中的Update语句

    今天在SQL数据库操作时需要将一张表中的数据Update到另一张表中去, 可是用我以往的写法确怎么也不能成功.代码如下: update table1 a set a.Col1=b.Col2 from ...

  8. SQL Server 外键约束的例子

    外键约束的测试表与测试数据 -- 创建测试主表. ID 是主键. CREATE TABLE test_main ( id INT, value ), PRIMARY KEY(id) ); -- 创建测 ...

  9. IE兼容性问题解决方案2--css样式兼容标签

    在页面中加入下面的标签: <meta http-equiv = "x-UA-compatible" content="IE=edge,chrome=1"& ...

  10. NOIP2010 机器翻译

    1机器翻译 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单 ...