Android Sqlite:如何从 Listview 中获取 SQLite rowId?
Posted
技术标签:
【中文标题】Android Sqlite:如何从 Listview 中获取 SQLite rowId?【英文标题】:Android Sqlite: How to get the SQLite rowId from a Listview? 【发布时间】:2019-10-09 13:18:48 【问题描述】:我通过在填充 ListView 的 SQLite 数据库表中标记项目来创建用户选择的收藏夹列表。然后这些标记的项目将填充收藏夹 ListView。要正确执行此操作,我需要获取填充 ListView 的 SQLite 数据库表中的 rowId,以便添加标志。如何获取 rowId?
这是我当前的代码:
OnItemClickListener:
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int
position, long id)
String selected = (String)
mListView.getItemAtPosition(position);
mItemTextView = findViewById(R.id.itemWords);
mItemNumberTextView = findViewById(R.id.itemNumber);
mId = id;
mBookCopied =
mItemHeaderNameTextView.getText().toString();
mItemCategoryNumberCopied = Integer.toString(mCategorySelected + 1);
mItemNumberCopied =
mItemNumberTextView.getText().toString();
mPosition = position + 1;
mCopiedItemListItem = mItemCopied + " " +
mCategoryNumberCopied + ":" + mPosition + "\n\n" + selected;
showMenu(view);
);
项目适配器:
class ItemAdapter extends ArrayAdapter<String>
public ItemAdapter(Context context, int resource1, List<String> items)
super(context, resource1, items);
mContext = context;
mResource1 = resource1;
mItems= items;
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent)
View listItem = convertView;
int pos = position + 1;
if (listItem == null)
listItem = LayoutInflater.from(mContext).inflate(mResource1, parent, false);
mItemNumberTextView = (TextView) listItem.findViewById(R.id.itemNumber);
mItemumberTextView.setText(String.valueOf(pos) + " ");
mItemTextView = (TextView) listItem.findViewById(R.id.itemWords);
mItemTextView.setText(mItems.get(position));
return listItem;
我曾尝试使用 onItemClickListener 的“long id”部分,但这只是返回 ListView 中的位置。我需要数据库表中的实际 rowId。
我在这里缺少什么?感谢您的帮助。
【问题讨论】:
【参考方案1】:你需要
使用 CursorAdapater(然后 long id 将成为 ID,注意 id 列必须称为 _id (BaseColumns._ID
) ,您可以有一个别名为 rowid 的列,例如 rowid AS _id
)。
class ItemAdapter extends ArrayAdapter....
使用class ItemAdapter extends CursorAdapter
使用包含提取为ArrayList<String>
而是ArrayList<suitable_object_with_id>
的id NOT 数据的源并通过getItem(position) 访问它并使用适当的对象方法提取id。
构建一个互补数组,以便该位置可以访问 id。
【讨论】:
谢谢 MikeT,我要试试这个,看看能不能成功。 迈克,我很欣赏你写的东西。我仍然有很多麻烦。你能提供一些例子吗? MikeT,我使用了 CursorAdapter,它运行良好。感谢您的帮助。以上是关于Android Sqlite:如何从 Listview 中获取 SQLite rowId?的主要内容,如果未能解决你的问题,请参考以下文章
Android Sqlite:如何从 Listview 中获取 SQLite rowId?
如何从数据库中检索所有表? (Android,SQLite)[重复]
如何以编程方式从 Android 中删除 SQLite 数据库
如何从 android studio 中的 SQLite 插入中删除不需要的字符