android - Android:使用自定义适配器时如何从 onItemClickListener 获取数据库行 ID?
问题描述
使用自定义适配器时,我试图从 onItemClickListener 中的列表视图项获取数据库行 ID。
我尝试从 onItemClickListener 内部的“long id”获取 id,但它似乎只返回实际列表中项目的行 id,而不是数据库行 id。
这是我的 onItemClickListener:
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
String selected = (String)
mListView.getItemAtPosition(position);
mTextView = findViewById(R.id.Words);
mNumberTextView = findViewById(R.id.Number);
mId = id;
mAdapterView = adapterView;
mPositionForRow = position;
mCopied =
mHeaderNameTextView.getText().toString();
mNumberCopied = Integer.toString(mSelected + 1);
mNumberCopied =
mNumberTextView.getText().toString();
mPosition = position + 1;
mCopiedListItem = mBookCopied + " " +
mNumberCopied + ":" + mPosition + "\n\n" + selected;
showMenu(view);
}
});
这是我的自定义适配器:
public Adapter(Context context, int resource1, List<String> lines) {
super(context, resource1, lines);
this.mContext = context;
this.mResource1 = resource1;
this.mLines = lines;
}
@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);
}
mNumberTextView = (TextView)
listItem.findViewById(R.id.Number);
mNumberTextView.setText(String.valueOf(pos) + " ");
mTextView = (TextView) listItem.findViewById(R.id.Words);
mTextView.setText(mLines.get(position));
}
return listItem;
}
}
单击列表项时,会弹出一个菜单。如果用户选择“选择项目”,它应该从项目单击中获取实际的数据库行 ID,但它返回的列表项目编号不是我需要的。在此过程中,我还将 long 转换为 int。我只是没有看到需要包含该方法。
这是该菜单选项:
case R.id.select_item:
Log.d("TAG", "mId =" + mId);
mRowPositionInt = (safeLongToInt(mId));
updateData(1, mRowPositionInt);
Log.d("TAG", "mRowPosition =" + mRowPositionInt);
mSharedPreferences.edit().putInt("RowPositionSqlite",
mRowPositionInt).apply();
Toast toast2 = Toast.makeText(getApplicationContext(),
"Select Item Button Clicked!", Toast.LENGTH_SHORT);
toast2.show();
}
没有错误消息,它只是不返回实际的数据库行 ID。任何意见将是有益的。我已经通过其他职位,但没有适用于我的情况。我感谢您的帮助。
解决方案
long id
您返回的时间是您从适配器返回的时间getItemId()
。
如果您希望返回数据库行 ID 而不仅仅是位置,您需要:
- 将数据库行 ID 传递给您的适配器
- 已
getItemId()
返回给定位置的正确 ID。
推荐阅读
- python - Python - 在表格中水平插入列表
- android - 如何验证 Raspberry 和 Android 之间的蓝牙通信
- angular - 数据绑定在角度不起作用
- azure - Azure 文件共享不持久
- unity3d - Animator 没有 AnimatorController
- shiny - 在 R 闪亮的 renderDatatable 中创建堆叠条形迷你图
- python - 使用python读取文本表
- android - 响应本机应用程序(android)中的 XMLHttpRequest.xhr.onerror 网络请求失败
- java - Docker build 找不到 COPY 命令的源文件夹
- android - Instagram 如何在故事中存储哈希标签和位置