Search code examples
androidandroid-alertdialoglong-click

Android: using AlertDialog when an item from a listview is long pressed


I have a list of items, created by a listview. I would like to long press one of the items on the list and an alert dialog to open up and depending on yes or no key on that dialog box I wan to set a global variable. The code that I am using is inside "MyActivity.java" and looks like this:

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;
    }
});

However, the global variable "yesOrNo" is not changing no matter if I press "Yes" or "No". Can somebody let me know what is wrong with the code?

Thanks for the help.


Solution

  • AlertDialog does not wait for the selection. After you call show() method, these two lines will be executed immediately:

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

    So value of yesOrNo variable will be its initial value.

    Solution:

    You can call doSomething(0) in onClick() method of positiveButton and doSomething(1) in onClick() method of negativeButton.