android - Android Sqlite:如何从 Listview 中获取 SQLite rowId?
问题描述
我通过在填充 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。
我在这里想念什么?我感谢您的帮助。
解决方案
你需要要么
使用 CursorAdapater(然后long id将是ID,注意 id 列必须称为_id (
BaseColumns._ID
),您可以有一个别名为rowid的列,例如rowid AS _id
)。- 例如,而不是
class ItemAdapter extends ArrayAdapter....
使用class ItemAdapter extends CursorAdapter
- 例如,而不是
使用包含提取为
ArrayList<String>
but的 id NOT 数据的源,ArrayList<suitable_object_with_id>
并通过 getItem(position) 访问它,并使用适当的对象的方法来提取 id。构建一个互补数组,以便该位置可以访问id。
推荐阅读
- html - css 悬停动画在 icomoon 中不起作用
- apache-kafka - 带有 max.request.size 参数的 kafka 流状态存储问题
- heroku - 尝试将 symfony 5 应用程序与 heroku 上的 redis 连接时出错
- vhdl - vhdl 中是否有检查端口是否已连接或打开的功能?
- arrays - 如何使用方括号制作 JSON 数组
- css - 专注于背景模糊的选定容器
- mysql - 根据我从中选择的表设置视图的列值
- flutter - 如何在颤动的文本字段中处理标签文本?
- reactjs - 为什么我不能遍历数组?
- linux - Docker-compose:由于“权限被拒绝”错误,nginx 无法启动