我已经尝试了很多东西来使这个代码工作,它包括在从地图上录制元素/标记时显示AlertDialog / description。问题是4个标记中的3个有效(但没有显示正确的描述。它看起来像前一个),最后一个力用logcat错误关闭应用程序:
CursorIndexOutOfBoundsException: Index 4 requested, with a size of 4
代码:
@Override
protected boolean onTap(int index) {
db = openHelper.getWritableDatabase();
String[] columns_descri = new String[] {COL_DESCRI};
Cursor cur = db.query(true, TABLE_COORD, columns_descri,null, null, null, null, null, null);
cur.moveToPosition(index);
String description = cur.getString(cur.getColumnIndexOrThrow(COL_DESCRI));
AlertDialog.Builder dialog = new AlertDialog.Builder(Geo.this);
dialog.setTitle("Infos.");
dialog.setMessage(description);
dialog.setPositiveButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialog.show();
cur.close();
db.close();
return true;
}
答案 0 :(得分:1)
你不应该直接使用索引,相反,你可能有一个适配器可以给你想要显示的对象或你的行的_id,你可以用来伪造一个精确的请求
您正在使用ItemizedOverlay。因此,您可以通过以下方式获取已点按的项目:
public void onTap(int index) {
Item item = getItem(index);
}
然后我想你可以从项目而不是光标中获取相关信息。
答案 1 :(得分:0)
只需使用cur.moveToPosition(index - 1);