使用android.R.layout.simple_list_item_1实现轻量级主题

10

我了解到使用android:entriesListView一起使用时,它会将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 }
);

很不幸,因为我正在使用浅色主题 (在我的 <application> 中设有 android:theme="@android:style/Theme.Light"),导致列表项出现了白色文本,使它们无法阅读。

然而,当使用 android:entries 来指定静态的项目列表时,这些项目会以黑色文本颜色正确显示。

我做错了什么?我该如何使我的动态适配器使用标准布局但能够在浅色主题下正常工作?

1个回答

15

如果我说错了,请指正。

您至少有些错误。它使用com.android.internal.R.layout.simple_list_item_1。虽然这几乎与android.R.layout.simple_list_item_1相同,但可能会具有不同的主题。

此外,永远不要使用getApplicationContext()。只需使用您的Activity作为Context即可。看看是否有所帮助。


2
确实,使用this而不是getApplicationContext()可以解决它。哇!谢谢! - Felix
3
@Felix: 是的,getApplicationContext()这个方法真的很混乱。它会给你一个Application对象,它也是一个Context,但显然在涉及与Context相关的任何GUI方面时并不顺利。除非你真的需要Application对象(例如,你有一个自定义的),否则我永远不会使用getApplicationContext()。毕竟,这个方法是在Context上的方法,所以根据定义,你已经拥有了完美的Context。我很高兴这起作用了! - CommonsWare
我一直以为getApplicationContext()更加正确(如果他们改变了上下文的工作方式,而this不再是一个Context呢?getApplicationContext()可能会被更新以反映API中的更改,这样我就不必重构我的代码)。谢谢你澄清这个问题 :) - Felix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接