关于自定义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://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()影响主题)