Android:在ListView的onItemClick事件中使用AlertDialog

时间:2011-10-04 19:17:45

标签: android android-listview

我有一个使用ListActivity的Android应用。单击列表中的项目时,我想向用户显示确认对话框,然后对单击的项目执行一些操作。

但是,从对话框的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();

    }
});  

我想我可以通过将它存储在Activity上的成员变量中来传递信息,但似乎应该有更好的解决方案!任何人都可以用正确/明智的方式填写我这个吗?

谢谢, 安迪

1 个答案:

答案 0 :(得分: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);

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