安卓:使用AlertDialog当从列表视图中的项目长按(Android: using AlertD

2019-10-29 05:34发布

我有一个项目列表,通过列表视图创建。 我想长按列表和警告对话框上的一个项目,开拓并根据是或在该对话框中我婉设置一个全局变量没有钥匙。 我使用的代码是“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”是不会改变不管。 有人可以让我知道什么是错的代码?

谢谢您的帮助。

Answer 1:

AlertDialog不等待选择。 之后你打电话show()方法,这两条线将被立即执行:

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

所以价值yesOrNo变量将是其初始值。

解决方案

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



Answer 2:

yesOrNo是changing.But你没能赶上it.Because AlertDialog是异步不会等待click.It执行scope.If其余部分,你想看到的变化,然后看到对话框上点击的价值按钮。然后你会看到



Answer 3:

你不能检查你叫b.show之后yesOrNo的值()。 只是因为现在所示的对话框,并不意味着一个按钮被点击。 你应该做你DO SOMETHING内部OnClickListener还是从内调用一个方法OnClickListener



Answer 4:

下面的测试是不是在正确的地方:

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

一旦创建您的对话框据评估,而不是一旦用户点击一个按钮。 所以yesOrNo仍然是false ,在那个时候,我们从来没有DO SEOMTHING

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



Answer 5:

调用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();
   }


文章来源: Android: using AlertDialog when an item from a listview is long pressed