0

我有一个由列表视图创建的项目列表。我想长按列表中的一项并打开一个警报对话框,并根据该对话框上的“是”或“否”键来设置全局变量。我正在使用的代码位于“MyActivity.java”中,如下所示:

ListView lv = getListView();
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> av, View v, int pos, final long id) {

        final AlertDialog.Builder b = new AlertDialog.Builder(MyActivity.this);
        b.setIcon(android.R.drawable.ic_dialog_alert);
        b.setMessage("Are you sure?");
        b.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    yesOrNo = 1;
                }
        });
        b.setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    yesOrNo = 0;
                }
        });

        b.show();

        if (yesOrNo == 1) {
            DO SOMETHING;   
        }
        return true;
    }
});

但是,无论我按“是”还是“否”,全局变量“yesOrNo”都不会改变。有人可以让我知道代码有什么问题吗?

谢谢您的帮助。

4

5 回答 5

2

AlertDialog不等待选择。调用show()方法后,这两行将立即执行:

if (yesOrNo == 1) {
        DO SOMETHING;   
}

所以yesOrNo变量的值将是它的初始值。

解决方案

您可以调用positiveButtondoSomething(0)的方法和negativeButton的方法。onClick()doSomething(1)onClick()

于 2011-07-20T14:51:21.213 回答
0

yesOrNo 正在改变。但你无法捕捉到它。因为 AlertDialog 是异步的,它不会等待点击。它会执行范围的其余部分。如果你想查看更改,请查看对话框上单击的值按钮。然后你会看到

于 2011-07-20T14:51:30.170 回答
0

调用 b.show() 后,您无法立即检查 yesOrNo 的值。仅仅因为现在显示了对话框,并不意味着单击了按钮。你应该在DO SOMETHING里面做OnClickListener或者从里面调用一个方法OnClickListener

于 2011-07-20T14:51:51.040 回答
0

以下测试不在正确的位置:

if (yesOrNo == 1) {
    DO SOMETHING;   
}

它会在您的对话框创建后进行评估,而不是在用户单击按钮后进行评估。那个时候yesOrNo还是false这样,我们从来没有DO SEOMTHING

DO SOMETHING应该位于b.setPositiveButton()onClick()处理程序中。

于 2011-07-20T14:53:25.863 回答
0

在positivebutton和negativebutton中调用两个单独的函数,然后编写你想要的代码:

样本:

public void onListItemClick(ListView parent, View view, int position, long id) {

         b = new AlertDialog.Builder(this);

        b.setMessage("Are you sure?");
        b.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

              yes();
                }
        });
        b.setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                  no();
                }
        });
        b.show();
    Toast.makeText(this, "no", Toast.LENGTH_LONG).show();
    }

   public void yes()
   {
       Toast.makeText(this, "yes", Toast.LENGTH_LONG).show();
   }
   public void no()
   {
       Toast.makeText(this, "no", Toast.LENGTH_LONG).show();
   }
于 2011-07-20T15:23:47.883 回答