SimpleCursorAdapter到[]和[]与内容提供者的映射

时间:2014-05-03 10:09:24

标签: android simplecursoradapter

我有一个ListView,其中包含5 TextView个,所以我使用SimpleCursorAdapter来填充它。数据来自内容提供商。 我的问题是_id列。我知道我包含它以使适配器工作。我的问题是,我有5个文本视图,我会为六个列设置投影数组。

[]和[]

的数组
static {

    from = new String[] {
        EmployeeProviderContract.ROW_ID,
        EmployeeProviderContract.F_NAME,
        EmployeeProviderContract.L_NAME,
        EmployeeProviderContract.ROW_EMP_ID,
        EmployeeProviderContract.AGE,
        EmployeeProviderContract.SEX
    };


    to = new int[] {

            R.id.employee_first_name,
            R.id.employee_last_name,
            R.id.e_employee_id,
            R.id.e_age,
            R.id.e_sex
    };
}

如您所见,to[]中有5个项目,from[]中有6个项目(因为_id)。

简单光标适配器

    mAdapter = new SimpleCursorAdapter(getApplicationContext(), 
    R.layout.single_row_layout, // The row template
    null, // Cursor but we dont have one right now, so NULL. Will come from swapCursor()
    from,// Columns to show from 
    to, // The layout ids i.e individual text views to show the data in
                0); // Default 0 as FLAG

因此,当光标返回时,它会在_id中设置R.id.employee_first_name的值,依此类推其余值。我不想在文本视图中显示_id。我无法删除_id,否则会抛出异常。 我该如何解决这个问题?非常愚蠢的问题,但我似乎找不到合适的方法。

这就是内容提供商查询的内容

Cursor returnCursor = db.query(EmployeeProviderContract.EMP_PERSONAL_TABLE_NAME,
                projection, selection , selectionArgs, null, null, sortOrder);

注意:我正在延长Activity而不是ListActivity

1 个答案:

答案 0 :(得分:1)

也许从ContentProvider返回的Cursor不包含“_id”列。检查数据库表是否具有_id列。最佳实践是在Contract类中的内部类(表类)中实现 BaseColumns 接口,SQLiteOpenHelper的实现使用它来创建数据库。