【问题标题】:Return object from CursorAdapter.get()从 CursorAdapter.get() 返回对象
【发布时间】:2012-08-29 15:46:06
【问题描述】:
我正在重写 CursorAdapter 并且我需要获取最后一项,问题是 CursorAdapter 实际上有一个 get() 方法...但是 source 是一个 db 并且它返回一个普通对象! (我什至不知道它是什么,我希望它返回一个 Cursor 对象...)
无论如何,我怎样才能让它返回我的 Wrapper db 行类的实例?
示例:
说我的数据库有这样的行:
id|名字|姓氏
我会从中创建一个类Person。
现在我想要一个来自光标适配器的 Person get(int i) 方法...
【问题讨论】:
标签:
android
android-cursoradapter
【解决方案1】:
只需使用 adapter.getItem() 并将其转换为 Cursor,无需像接受的答案那样手动移动光标
Cursor cursor = (Cursor) myCursorAdapter.getItem(position);
String myColumnValue = cursor.getString(cursor.getColumnIndex("YOUR_COLUMN_NAME"));
【解决方案2】:
现在我想要一个来自光标适配器的 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;
}
【解决方案3】:
好吧,我必须调试才能找到答案。假设你有这样的东西
SimpleCursorAdapter
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));
}
}
}
};