Android Sqlite: Как получить идентификатор строки SQLite из Listview? - PullRequest
0 голосов
/ 23 мая 2019

Я создаю выбранный пользователем список избранного, помечая элементы в таблице базы данных SQLite, которая заполняет ListView.Эти помеченные элементы будут затем заполнять избранное ListView.Чтобы сделать это правильно, мне нужно получить rowId в таблице базы данных SQLite, из которой заполнен ListView, чтобы я мог добавить флаг.Как получить 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);
        }
    });

ItemAdapter:

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, но это просто возвращает позицию в ListView.Мне нужен фактический идентификатор строки из таблицы базы данных.

Что мне здесь не хватает?Я ценю вашу помощь.

1 Ответ

1 голос
/ 23 мая 2019

Вам нужно либо

  • использовать CursorAdapater (тогда длинный идентификатор будет тогда ID , учитывая, что столбец идентификатора ДОЛЖЕН называться _id (BaseColumns._ID) , у вас может быть столбец с псевдонимом rowid например rowid AS _id).

    • например. вместо class ItemAdapter extends ArrayAdapter.... используйте class ItemAdapter extends CursorAdapter
  • используйте источник, который содержит данные id, которые НЕ извлекаются как ArrayList<String>, но ArrayList<suitable_object_with_id>, и обращайтесь к нему через getItem (position) и используйте метод соответствующего объекта для извлечения идентификатора.

  • построить бесплатный массив, чтобы позиция могла получить доступ к id .

...