2011-08-23 31 views
1

我在我的SQLite数据库中有一个描述列,其中包含一些要粘贴到每个标记时显示的文本。每个标记都有自己的描述。问题是当我点击一个标记时,我会显示所有其他AlertDialog。我使用下面的代码:在地图上点击标记结果在AlertDialog中显示所有其他地图标记

@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,但我不知道怎么做。我试图解决这个问题,但我似乎无法做到。有关如何解决问题的任何建议?

回答

2

您似乎在循环播放结果中的所有项目。

cur.moveToFirst()移动您的第一个项目,然后cur.moveToNext();将您移到每次迭代的下一个项目。您然后显示每个项目的警报对话框!

你真的不应该需要在用户每次点击一个项目的时间来加载这样的数据,但最简单的[不推荐]的方式来解决你的代码是使用cur.moveToPosition(指数)代替你的循环。

+0

正是。你的意思是,我必须用'cur.moveToPosition(index)'替换'cur.moveToFirst()'并删除'cur.moveToNext()'?为什么不推荐? – androniennn

+0

不建议使用,因为您应该只加载一次数据 - 将其绑定到视图时。您尚未发布此代码,因此很难发表评论。您应该将其加载到本地集合中。然后,当用户点击一个项目时,只需按索引访问正确的项目。 – ShibbyUK

+0

我试过'cur.moveToPosition(index)',应用程序冻结,然后强制关闭。 – androniennn