使用具有浅色主题的android.R.layout.simple_list_item_1

Fel*_*lix 10 android listview themes

我已经了解到,当使用android:entriesa时ListView,它android.R.layout.simple_list_item_1用作列表项的布局以及android.R.id.text1该布局中TextView的ID.如果我错了,请纠正我.

知道这一点,我想创建自己的适配器但使用相同的布局资源,以便提供与平台的UI一致性.因此,我尝试了以下内容:

mAdapter = new SimpleCursorAdapter(
    getApplicationContext(),
    android.R.layout.simple_list_item_1,
    mSites,
    new String[] { SitesDatabase.KEY_SITE },
    new int[] { android.R.id.text1 }
);
Run Code Online (Sandbox Code Playgroud)

不幸的是,因为我正在使用一个轻主题(我有android:theme="@android:style/Theme.Light"我的<application>),列表项目显示为白色文本,使它们不可读.

但是,当使用android:entries指定静态项目列表时,项目会正确显示,并带有黑色文本颜色.

我究竟做错了什么?如何使我的动态适配器使用标准布局,但使用轻量级主题?

Com*_*are 15

如果我错了,请纠正我.

你至少有点不对劲.它使用com.android.internal.R.layout.simple_list_item_1.虽然这几乎是相同的android.R.layout.simple_list_item_1,但它可能以不同的方式主题化.

另外,永远不要使用getApplicationContext().只需使用你ActivityContext.看看是否有帮助.

  • @Felix:是的,`getApplicationContext()`是一个严重搞砸的方法.它为您提供了一个`Application`对象,它是一个`Context`,但显然不适合与Context相关的任何GUI相关的东西.除非你真的需要`Application`对象(例如,你有自定义对象),否则我永远不会使用`getApplicationContext()`.毕竟,该方法是一种方法......在"Context"上.因此,根据定义,您已经拥有了一个非常令人愉快的"上下文".我很高兴这很有用! (3认同)
  • 实际上,使用`this`而不是`getApplicationContext()`可以修复它.哇!谢谢! (2认同)