Нажатие на маркер карты приводит к тому, что AlertDialog отображает все остальные маркеры карты - PullRequest
1 голос
/ 23 августа 2011

В моей базе данных SQLite есть столбец описания, в котором содержится текст, отображаемый при прикосновении к каждому маркеру.Каждый маркер имеет свое описание.Проблема в том, что когда я нажимаю на один маркер, у меня отображаются все остальные AlertDialog s.Я использую следующий код:

@Override
protected boolean onTap(int index) {
     db = openHelper.getWritableDatabase();

     String[] result_columns = new String[] {COL_DESCRI};
     Cursor cur = db.query(true, TABLE_COORD, result_columns, null, null, null, null, null, null);
     cur.moveToFirst();
     while (cur.isAfterLast() == false) {
          String description = cur.getString(cur.getColumnIndexOrThrow("description"));
          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.moveToNext();
    }
    cur.close();
    db.close();

    return true;
}

Кажется, работает функция onTap:

protected boolean onTap(int index) {
     db = openHelper.getWritableDatabase();

     String[] result_columns = new String[] {COL_DESCRI};
     Cursor cur = db.query(true, TABLE_COORD, result_columns, null, null, null, null, null, null);

     cur.moveToPosition(index);
     String description = cur.getString(cur.getColumnIndexOrThrow("description"));

     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;
        }

Я знаю, что мне нужно назначить индекс для каждого AlertDialog но я не знаю как это сделать.Я пытался решить это, но я не могу этого сделать.Любые предложения о том, как решить проблему?

1 Ответ

2 голосов
/ 23 августа 2011

Вы, похоже, просматриваете все элементы в ваших результатах.

cur.moveToFirst () перемещает вас к первому элементу, затем cur.moveToNext (); перемещает вас к следующему элементу на каждой итерации.Затем вы отображаете диалоговое окно с предупреждением для каждого элемента!

Вам действительно не нужно загружать такие данные каждый раз, когда пользователь нажимает на элемент, но самый простой [не рекомендуемый] способ исправить ваш кодбыло бы использовать cur.moveToPosition (index) вместо вашего цикла.

...