Я пытаюсь получить детали для щелкнутого элемента в ListView, запросив базу данных SQLite. Я передаю длинное значение id из onItemClick в качестве первичного ключа. Однако длинный идентификатор не совпадает с фактическим первичным ключом в таблице. Я узнал фактический первичный ключ, запросив первичные ключи всех строк таблицы.Android onItemНажмите «Неверный идентификатор»
У меня есть следующие вопросы: 1. Правильно ли я полагаю, что длинный параметр id в onItemClick (родительский элемент AdapterView, представление View, int position, long id) содержит первичный ключ элемента в таблице базы данных?
- Если нет, как получить первичный ключ?
Я приложил мой код ниже:
list.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Display Client Details
Intent displayclient = new Intent(view.getContext(), display_clientdetails.class);
Integer db_id = (int) id;
String TAG = "client_list";
Log.d(TAG,"Position is" +position +" ID is " +db_id);
displayclient.putExtra("client_id",db_id);
view.getContext().startActivity(displayclient);
}
});
Он работал для меня после того, как я создал пользовательский адаптер и написал переопределение метода getItemId. Однако я не понял причины, почему это сработало. Будет здорово, если бы вы могли поделиться причиной, почему getItemId не возвращает первичный ключ, не будучи перегруженным. Благодарю. – user2348956
Это потому, что базовая функция не знает, что вы используете как id. Было бы неплохо, если бы это сработало из коробки, но, учитывая, сколько разных и настраиваемых объектов вы могли бы использовать для адаптера, это кажется сложным. Функция по умолчанию возвращает параметр позиции, как вы можете видеть здесь: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/ArrayAdapter.java –
Проверка исходного кода - хорошая идея. Спасибо – user2348956