9

我正在覆盖 CursorAdapter 并且我需要获取最后一项,问题是 CursorAdapter 实际上有一个 get() 方法......但是 source 是一个数据库,它返回一个普通对象!(我什至不知道它是什么,我希望它返回一个 Cursor 对象......)

尽管如此,我怎样才能让它返回我的 Wrapper db 行类的实例?

示例:假设我的数据库有这样的行:

身份证|名字| 姓

我会从中创建一个类Person

现在我想要一个来自光标适配器的 Person get(int i) 方法......

4

3 回答 3

44

好吧,只需使用 adapter.getItem() 并将其转换为 Cursor,无需像在接受的答案中那样手动移动光标

Cursor cursor = (Cursor) myCursorAdapter.getItem(position);
String myColumnValue = cursor.getString(cursor.getColumnIndex("YOUR_COLUMN_NAME"));
于 2012-12-25T02:44:28.873 回答
21

现在我想要一个来自光标适配器的 Person get(int i) 方法......

这似乎是一个奇怪的要求。我会将光标本身(或从 CursorAdapter 返回的光标getItem())传递给我的 Activity 中的常规方法。这里是创建Person get()方法的基本步骤。

创建您的 Person 类:

public class Person {
    long id;
    String firstName;
    String surname;
}

在您的自定义 CursorAdapter 中,只需使用如下方法:

public Person get(int position) {
    Cursor cursor = getCursor();
    Person person;
    if(cursor.moveToPosition(position)) {
        person = new Person();
        person.id = cursor.getLong(cursor.getColumnIndex("_id"));
        person.firstName = cursor.getString(cursor.getColumnIndex("firstName"));
        person.surname = cursor.getString(cursor.getColumnIndex("surname"));
        results.add(person);
    }

    return person;
}
于 2012-08-29T16:42:01.237 回答
0

好吧,我不得不调试才能找到答案。假设你有这样的东西

简单光标适配器

themesAdapter = new SimpleCursorAdapter(getContext(), R.layout.spinner_with_count, null,
                new String[]{ThemeData.COLUMN_ID, ThemeData.COLUMN_SET_COUNT}, new int[] { R.id.spinnerTxLabel, R.id.spinnerTxCount }, 0);
        inputTheme.setAdapter(themesAdapter);

然后你必须像这样检索。

inputTheme.setOnItemSelectedListener(new OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
                    // if not all themes, get subthemes items
                    if(position > 0){

                            // load subtheme
                            Cursor currentCursor = (Cursor)inputTheme.getAdapter().getItem(position);
                            if(currentCursor != null) {
                                String value = currentCursor.getString(currentCursor.getColumnIndexOrThrow(Data.COLUMN_ID));
                            }
                        }
                    }

};

于 2020-06-19T10:26:17.020 回答