1

我有一个简单的警报对话框的代码,看起来像这样。

在此处输入图像描述

这是我的代码:

private boolean toggle;

//an onCreate method here

public boolean onOptionsItemSelected(MenuItem item) {  
        switch (item.getItemId()) {       
        case R.id.deleteContact:
            if (selectedContactIndex == -1){
                Context context = getApplicationContext();
                CharSequence text = "Please select a contact to delete!";
                int duration = Toast.LENGTH_LONG;

                Toast toast = Toast.makeText(context, text, duration);
                toast.show();
                return true;
            }
            AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK);
            myAlertDialog.setTitle("           Confirm Contact Deletion");
            myAlertDialog.setMessage("Are you sure you want to delete " + Contact.contactList.get(selectedContactIndex).getFullName() + "?");

            myAlertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface arg0, int arg1) {
                toggle = true;
            }});

            myAlertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface arg0, int arg1) {
                toggle = false;
            }});

            myAlertDialog.show();
            System.out.println(toggle);
            if (toggle) {
                Contact.contactList.remove(selectedContactIndex);
                for (int i = selectedContactIndex; i < Contact.contactList.size(); i++){
                    Contact.contactList.get(i).setContactNumber(i);
                }
                Contact.totalContacts--;
                selectedContactIndex = -1;
                contactsView.invalidateViews();
            }
    }

所以我这样做的方式是,我有一个名为切换的布尔值。如果他们单击“是”,则布尔值设置为 true,并且将执行 if 语句,该语句实际上删除了联系人。我使用了 system.out.print 并检查了日志猫,显然即使在我单击“是”按钮后切换变量也是错误的。

我的一个假设是:布尔值的默认值为 false,因此可能 onClick 方法甚至没有分配任何东西来切换。但我不知道如何解决这个问题。

任何帮助,将不胜感激。

编辑:感谢您的回答,我将联系人删除逻辑放在了积极按钮的 onClick 方法中,它的工作方式就像我想要的那样!我从中得到的主要内容是意识到 android 并不总是线性执行。

4

5 回答 5

3

get 的实际原因toggle always false是您的所有函数同时执行,在您对 dailog 执行任何操作之前,if statment is also execute.

解决方案@ 您在单击对话框切换设置为 trueif statement时执行,所以将您的对话框放在外面。toggle=trueYesif statementyes click

AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK);
            myAlertDialog.setTitle("           Confirm Contact Deletion");
            myAlertDialog.setMessage("Are you sure you want to delete " + Contact.contactList.get(selectedContactIndex).getFullName() + "?");

            myAlertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface arg0, int arg1) {
                //toggle = true;
                 //Here will be your if statement.
            }});

            myAlertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface arg0, int arg1) {
               // toggle = false;
            }});

            myAlertDialog.show();
            System.out.println(toggle);

            }
    }
于 2013-09-20T06:31:54.273 回答
0

如果您的默认值为false并且在删除联系人后刷新您的活动而不是将您的切换值设置为 false 由您在“是”按钮中更改

于 2013-09-20T06:33:41.463 回答
0

如果将逻辑放在 onclick 侦听器中而不是在其外部放置 if 语句,可能会更好。尝试这样的事情。

AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK);
     myAlertDialog.setTitle("           Confirm Contact Deletion");
     myAlertDialog.setMessage("Are you sure you want to delete " + Contact.contactList.get(selectedContactIndex).getFullName() + "?");

     myAlertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                    toggle = true;
                    Contact.contactList.remove(selectedContactIndex);
                for (int i = selectedContactIndex; i < Contact.contactList.size(); i++){
                    Contact.contactList.get(i).setContactNumber(i);
                }
                Contact.totalContacts--;
                selectedContactIndex = -1;
                contactsView.invalidateViews();
     }});

     myAlertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                    toggle = false;
     }});


     myAlertDialog.show();
于 2013-09-20T06:34:04.080 回答
0

嘿,伙计,onclick 侦听器中的函数仅在用户通过单击是或否进行操作后调用,此时您的删除联系人的代码已经执行,您的代码的执行不是线性的,点击侦听器函数稍后调用。

尝试这样的事情来让你朝着正确的方向前进

myAlertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface arg0, int arg1) {
        Contact.contactList.remove(selectedContactIndex);
        for (int i = selectedContactIndex; i < Contact.contactList.size(); i++){
            Contact.contactList.get(i).setContactNumber(i);
        }
        Contact.totalContacts--;
        selectedContactIndex = -1;
        contactsView.invalidateViews();
    }
});
于 2013-09-20T06:34:48.567 回答
-2

将变量声明为private boolean toggle = true;

于 2013-09-20T06:32:34.303 回答