0

来自 Cursor 的数据使用 SimpleCursorAdapter 添加到 ListView 显示白色文本(如何使其变为黑色) - 参见图像

在此处输入图像描述 这是简单的光标适配器代码

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

4 回答 4

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方法的覆盖,这将允许您设置/更改文本的颜色。试试看它是否有效。

于 2013-02-25T15:43:39.350 回答
2

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

OP 使用的是 Light 主题,它会this返回。 getApplicationContext()不包含膨胀的主题。当它膨胀时,它包括系统默认主题。

更详细的信息可以在这里找到

于 2014-05-07T14:26:34.537 回答
1

最近遇到了同样的问题。使用了两个 ListActivity。单击第一个项目上的项目启动第二个 ListActivity。第一个正确显示了主题,但第二个与 OP 中的屏幕截图显示相同。

唯一不同的是我在创建数组适配器时使用的上下文参数。第一个活动使用了 this 引用,第二个活动我使用了 getApplicationContext(如 OP)。将其更改为 this 引用修复了输出。

有更多知识的人可以扩展为什么getApplicationContext“主题”似乎与通过this(ListActivity)访问的主题不同。我原以为主题是在清单中的应用程序标签中设置的,除非另有设置,否则这将是所有活动使用的主题。我承认我对 getContext... 方法的了解是有限的,我可能完全错误地解释了这一点。

于 2013-04-17T10:20:40.863 回答
0

试试这个 :

TextView tv = (TextView)findViewById(android.R.id.text1);

tv.setTextColor(Color.BLACK);

于 2013-02-25T15:40:38.163 回答