【问题标题】:Android Sqlite: How to get the SQLite rowId from a Listview?Android Sqlite:如何从 Listview 中获取 SQLite rowId?
【发布时间】: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。

我在这里缺少什么?感谢您的帮助。

【问题讨论】:

    标签: android sqlite listview rowid


    【解决方案1】:

    你需要

    • 使用 CursorAdapater(然后 long id 将成为 ID,注意 id 列必须称为 _id (BaseColumns._ID) ,您可以有一个别名为 rowid 的列,例如 rowid AS _id)。

      • 例如而不是class ItemAdapter extends ArrayAdapter.... 使用class ItemAdapter extends CursorAdapter
    • 使用包含提取为ArrayList&lt;String&gt; 而是ArrayList&lt;suitable_object_with_id&gt; 的id NOT 数据的源并通过getItem(position) 访问它并使用适当的对象方法提取id。

      李>
    • 构建一个互补数组,以便该位置可以访问 id

    【讨论】:

    • 谢谢 MikeT,我要试试这个,看看能不能成功。
    • 迈克,我很欣赏你写的东西。我仍然有很多麻烦。你能提供一些例子吗?
    • MikeT,我使用了 CursorAdapter,它运行良好。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2022-11-14
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2011-09-15
    • 2017-11-04
    相关资源
    最近更新 更多