【问题标题】:Android ListView and SimpleCursosrAdapter: nothing is showedAndroid ListView 和 SimpleCursorAdapter:没有显示
【发布时间】:2014-09-17 12:47:27
【问题描述】:

阅读了很多文档,但无法弄清楚我做错了什么。我只是想用 Cursor 加载数据并使用 SimpleCursorAdapter 在 ListView 中显示它。这是我的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.select_expense_category);
    DBHelper dbHelper = new DBHelper(this);
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    String q = "SELECT rowid as _id, " + GLO.DBEntry_Categories.COLUMN_CATEGORY +
            " FROM " + GLO.DBEntry_Categories.TABLE_NAME;
    Cursor cursor = db.rawQuery(q, new String[]{});
    cursor.moveToFirst();
    Toast toast = Toast.makeText(this, "Read count: " + Integer.toString(cursor.getCount()) + " " + cursor.getString(0), Toast.LENGTH_LONG);
    toast.show();
    cursor.moveToFirst();
    //TODO: use Loader
    String[] fromCols = {GLO.DBEntry_Categories.COLUMN_CATEGORY};
    int[] toViews = {R.id.MyTextView1};
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor,
            fromCols, toViews, 0);

    ListView listView = (ListView) findViewById(R.id.SelectExpenseCategory_list);
    listView.setAdapter(adapter);
}

所以 toast 消息显示光标中有 3 个项目,并且数据是持久的(至少在第一个中,但我也相信其他项目)。但 ListView 中没有显示任何内容。

这是我的活动布局的一部分:

<ListView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/SelectExpenseCategory_search"
        android:layout_centerHorizontal="true"
        android:id="@+id/SelectExpenseCategory_list">
</ListView>

这里是项目布局的完整文件:

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/MyTextView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:padding="5dp"
    android:textColor="@color/cm_dark_green"
    android:textSize="24sp">
</TextView>

任何想法有什么问题吗?..

【问题讨论】:

    标签: android listview android-listview simplecursoradapter


    【解决方案1】:

    您正在使用列表项的内部布局:android.R.layout.simple_list_item_1

    那里的TextView id 称为text1,所以改用这个:

    int[] toViews = {android.R.id.text1};
    

    如果您想使用自己的自定义布局,请将适配器使用的布局更改为例如R.layout.list_item_layout.

    【讨论】:

    • 我按照您的建议将 toViews 更改为内部 ID,但没有任何改变。我的 ListView 中仍然没有任何内容 :(
    • 是的。我将其更改为显示所有条目的数量和前两个条目的内容,它显示 DB 中有 4 个条目,前两个有一个值
    • 嗯,你的答案是正确的 =) 我意识到在我的模拟器中,白色的浅灰色在 320x200 中完全不可见 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    相关资源
    最近更新 更多