我了解到使用android:entries
与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 }
);
很不幸,因为我正在使用浅色主题 (在我的 <application>
中设有 android:theme="@android:style/Theme.Light"
),导致列表项出现了白色文本,使它们无法阅读。
然而,当使用 android:entries
来指定静态的项目列表时,这些项目会以黑色文本颜色正确显示。
我做错了什么?我该如何使我的动态适配器使用标准布局但能够在浅色主题下正常工作?
this
而不是getApplicationContext()
可以解决它。哇!谢谢! - FelixgetApplicationContext()
这个方法真的很混乱。它会给你一个Application
对象,它也是一个Context
,但显然在涉及与Context
相关的任何GUI方面时并不顺利。除非你真的需要Application
对象(例如,你有一个自定义的),否则我永远不会使用getApplicationContext()
。毕竟,这个方法是在Context
上的方法,所以根据定义,你已经拥有了完美的Context
。我很高兴这起作用了! - CommonsWaregetApplicationContext()
更加正确(如果他们改变了上下文的工作方式,而this
不再是一个Context
呢?getApplicationContext()
可能会被更新以反映API中的更改,这样我就不必重构我的代码)。谢谢你澄清这个问题 :) - Felix