使用SimpleCursorAdapter添加到ListView的Cursor数据显示白色文本(如何使其变黑)

时间:2013-02-25 15:18:32

标签: android simplecursoradapter

使用SimpleCursorAdapter添加到ListView的Cursor数据显示白色文本(如何使其变黑) - 查看图像

enter image description here 这是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>

4 个答案:

答案 0 :(得分:3)

this使用的主题与getApplicationContext()返回的上下文使用的主题不同。简单的答案总是使用this来维护您的主题。

OP使用Light主题,this返回。 getApplicationContext()不包含夸大的主题。当它被夸大时,它包括系统默认主题。

可以找到更详细的信息here

答案 1 :(得分:2)

像Egor说的那样,如果你能展示更多代码,那将会很有帮助。

与此同时: 看起来你正在使用具有'轻'(全息)主题的列表视图项目,而你的应用程序(或只是那个活动()使用'黑暗'(全息)主题。文本视图的文本颜色是从应用程序的黑色主题(白色字体颜色)在白色背景上。

要弄清楚为什么会发生这种情况,我们需要更多代码(例如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);