使用SimpleCursorAdapter添加到ListView的Cursor数据显示白色文本(如何使其变黑) - 查看图像
这是Simple游标适配器代码
public void displayWords(Cursor c){
// Creates a new SimpleCursorAdapter
SimpleCursorAdapter mCursorAdapter = new SimpleCursorAdapter(
getApplicationContext(), // The application's Context object
android.R.layout.simple_list_item_1, // A layout in XML for one row in the ListView
c, // The result from the query
new String[] {DatabaseTable.COL_WORD}, // A string array of column names in the cursor
new int[] { android.R.id.text1 }); // An integer array of view IDs in the row layout
// Sets the adapter for the ListView
setListAdapter(mCursorAdapter);
/* Using SimpleCursorAdapter to get Data from DB.
* stackoverflow.com/questions/12077955/android-using-simplecursoradapter-to-get-data-from-database-to-listview
*/
}
AndroidManifes文件中使用的样式资源
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- API 14 theme customizations can go here. -->
</style>
<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
<!-- API 11 theme customizations can go here. -->
</style>
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
</style>
答案 0 :(得分:3)
this
使用的主题与getApplicationContext()
返回的上下文使用的主题不同。简单的答案总是使用this
来维护您的主题。
OP使用Light主题,this
返回。 getApplicationContext()
不包含夸大的主题。当它被夸大时,它包括系统默认主题。
可以找到更详细的信息here
答案 1 :(得分:2)
与此同时: 看起来你正在使用具有'轻'(全息)主题的列表视图项目,而你的应用程序(或只是那个活动()使用'黑暗'(全息)主题。文本视图的文本颜色是从应用程序的黑色主题(白色字体颜色)在白色背景上。
要弄清楚为什么会发生这种情况,我们需要更多代码(例如AndroidManifest.xml)。
OP评论后更新:
public void displayWords(Cursor c){
// Creates a new SimpleCursorAdapter
SimpleCursorAdapter mCursorAdapter = new SimpleCursorAdapter(
getApplicationContext(), // The application's Context object
android.R.layout.simple_list_item_1, // A layout in XML for one row in the ListView
c, // The result from the query
new String[] {DatabaseTable.COL_WORD}, // A string array of column names in the cursor
new int[] { android.R.id.text1 }){
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View newView = super.newView(context, cursor, parent);
((TextView)newView.findViewById(android.R.id.text1)).setTextColor(Color.BLACK);
return newView;
}
}; // An integer array of view IDs in the row layout
// Sets the adapter for the ListView
setListAdapter(mCursorAdapter);
/* Using SimpleCursorAdapter to get Data from DB.
* stackoverflow.com/questions/12077955/android-using-simplecursoradapter-to-get-data-from-database-to-listview
*/
}
我在您的代码中添加了适配器 newView 方法的覆盖,这样您就可以设置/更改文本的颜色。试一试,看看它是否有效。
答案 2 :(得分:1)
最近有同样的问题。使用了两个ListActivities。单击第一个上的项目启动第二个ListActivity。第一个正确显示主题,但第二个与OP中的屏幕截图相同。
唯一的区别是我在数组适配器创建中使用的上下文参数。第一个活动使用了这个引用,第二个活动使用了getApplicationContext(比如OP)。将其更改为此参考可修复输出。
有更多知识的人可能会扩展为什么getApplicationContext“主题”似乎与通过此主题访问的主题(ListActivity)不同。我原以为,由于主题是在清单中的应用程序标记中设置的,因此除非另有设置,否则这将是所有活动使用的主题。我承认我对getContext ...方法的了解是有限的,我可能完全错误地解释了这一点。
答案 3 :(得分:0)
试试这个:
TextView tv = (TextView)findViewById(android.R.id.text1);
tv.setTextColor(Color.BLACK);