2011-10-04 56 views
1

我有一个使用ListActivity的Android应用程序。点击列表中的项目时,我想向用户显示一个确认对话框,然后对点击的项目执行一些操作。Android:在ListView的onItemClick事件中使用AlertDialog

但是,从对话框的onClick处理程序中,我无法从列表onClick事件中访问位置变量,因此我无法确定用户单击了哪个项目。

这里是我想要达到一个例子:

getListView().setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
      int position, long id) { 

     DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       switch (which){ 
       case DialogInterface.BUTTON_POSITIVE: 
        // This doesn't work, can't access position from here 
        Object o = MyListActivity.this.getListView().getItemAtPosition(position); 
        testFunction(o); 
        break; 
       } 
      } 
     }; 

     AlertDialog.Builder builder = new AlertDialog.Builder(MyListActivity.this); 
     builder.setMessage("Are you sure you want to do this?").setPositiveButton("Yes", dialogClickListener) 
      .setNegativeButton("No", dialogClickListener).show(); 

    } 
}); 

我想我可以通过将其存储在活动的成员变量传递信息,但是看起来应该有解决方案更好任何人都可以用正确/合理的方式填补我的空缺吗?

感谢, 安迪

回答

2

不知道这是“正确”的方式做到这一点或没有,但你可以这样做:

@Override 
public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 
    final int InternalPosition = position; 

然后在你的处理器使用“InternalPosition”

Object o = MyListActivity.this.getListView().getItemAtPosition(InternalPosition); 

不知道这是否适用于您的情况,但我知道您可以从侦听器访问'最终'变量。

+0

听起来像一个体面的做法,谢谢! –