dialog-android怎么确定对话框返回的值是true还是false?

问题描述

android怎么确定对话框返回的值是true还是false?

似乎没有简单的方法获得一个警告框来返回一个简单的值。
下边的代码不起作用(答案变量不能设置在监听器里,事实上它甚至都没有编译)

public static boolean Confirm(Context context) {
    boolean answer;
    AlertDialog dialog = new AlertDialog.Builder(context).create();
    dialog.setTitle("Confirmation");
    dialog.setMessage("Choose Yes or No");
    dialog.setCancelable(false);
    dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int buttonId) {
            answer = true;
        }
    });
    dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "No", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int buttonId) {
            answer = false;
        }
    });
    dialog.setIcon(android.R.drawable.ic_dialog_alert);
    dialog.show();
    return answer;
}

注意:很重要的是这个方法是自己包含的,也就是说,它不依赖于外部变量或者是构造。仅仅是调用它然后获得你的值,true或者是false。

所以,应该怎么做?简单的想法就是返回true或者是false,但是这似乎比它自己来获得这些值复杂得多。
而且,setButton有这个表单:

dialog.setButton(int buttonId, String buttonText, Message msg)

但是不知道怎么用到它,这个消息应该发到哪,发给谁,哪个处理器是被用到的?

解决方案

我想说我对我自己的答案很满意,因为完全是靠我自己找到了一个简单的方法。
但是事实是尽管我发现了返回一个值的方法(就是下边的),但是它不起作用。
真正的问题是我想要一个同步的对话框,对话框在恢复代码之前在dialog.show()之后等待用户来回答
在android中没有这样的beast。所有的对话框都是异步的,所以dialog.show()只是在一些队列中贴了这个对话框然后继续。因此不能及时的得到答案。
对于所有的它的价值(没什么)下面你会在创建一个对话框的方法里面找到怎么设置一个值。也许这种技术还有其他的用途,不仅仅是在对话框的生命周期中。

下边是一些相关信息,如果你用final boolean answer;替换boolean answer;我可能会说:它可能会在监听器里边访问内部变量,但是不可能为它分配一个新值,因为它是已经被声明过了的了。=
这里关键的问题出现了。
定义变量为

final boolean[] answer = new boolean[1];

一些人已经知道为什么这个将起作用了。这里的最后变量不是的单一的布尔数组,而是该数组本身。
所以现在你可以指定数组element [0]

dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int buttonId) {
        answer[0] = true;
    }
});
. . .
return answer[0];

最终你能从你的方法中返回它。

解决方案二:

你能做的就是用Interface给你的Alert Dialog创建一个监听器用来监听AlertDialogs的动作
创建Interface

public class MyInterface {

    DialogReturn dialogReturn;

    public interface DialogReturn {

        void onDialogCompleted(boolean answer);
    }

    public void setListener(DialogReturn dialogReturn) {
        this.dialogReturn = dialogReturn;
    }

    public DialogReturn getListener() {
        return dialogReturn;

    }
}

现在,用你创建的 implements MyInterface.DialogReturn在你的类只是实现了Interface
然后你可以设置监听器而且能让它想下边的这样作用,

public class Main extends Activity implements MyInterface.DialogReturn{

    MyInterface myInterface;
    MyInterface.DialogReturn dialogReturn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
                ....
        myInterface = new MyInterface();
        myInterface.setListener(this);
    }

   public void Confirm(Context context) {
        AlertDialog dialog = new AlertDialog.Builder(context).create();
        dialog.setTitle("Confirmation");
        dialog.setMessage("Choose Yes or No");
        dialog.setCancelable(false);
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int buttonId) {
                myInterface.getListener().onDialogCompleted(true);
            }
        });
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int buttonId) {
                myInterface.getListener().onDialogCompleted(false);
            }
        });
        dialog.setIcon(android.R.drawable.ic_dialog_alert);
        dialog.show();
         }

@Override
    public void onDialogCompleted(boolean answer) {
        Toast.makeText(Main.this, answer+"", Toast.LENGTH_LONG).show();
            if(answer)
            // do something
            else
            // do something
    }
}

解决方案三:

这是我之前遇到问题的答案。我之前遇到的问题是怎么创建一个分开的确认框,可以通过其他的类或者activity访问,所以在那个确认框类中我们不需要写长代码。
首先你必须创建一个DialogHandler.java

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import src.app.R;

public class DialogHandler {
    public Runnable ans_true = null;
    public Runnable ans_false = null;

    // Dialog. --------------------------------------------------------------

    public boolean Confirm(Activity act, String Title, String ConfirmText,
            String CancelBtn, String OkBtn, Runnable aProcedure, Runnable bProcedure) {
        ans_true = aProcedure;
        ans_false= bProcedure;
        AlertDialog dialog = new AlertDialog.Builder(act).create();
        dialog.setTitle(Title);
        dialog.setMessage(ConfirmText);
        dialog.setCancelable(false);
        dialog.setButton(DialogInterface.BUTTON_POSITIVE, OkBtn,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int buttonId) {
                         ans_true.run();
                    }
                });
        dialog.setButton(DialogInterface.BUTTON_NEGATIVE, CancelBtn,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int buttonId) {
                        ans_false.run();
                    }
                });
        dialog.setIcon(android.R.drawable.ic_dialog_alert);
        dialog.show();
        return true;
    }
}

这是一个在另外一个类中调用它的示例

public class YourActivity extends Activity {
    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        findViewById(R.id.button1).setOnClickListener(myclick);
    }

    public final Button.OnClickListener myclick = new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            doclick();
        }
    };

    public void doclick() {
        DialogHandler appdialog = new DialogHandler();
        boolean dlg = appdialog.Confirm(this, "Message title", "Message content",
                "Cancel", "OK", aproc(), bproc());
    }

    public Runnable aproc(){
        return new Runnable() {
            public void run() {
                Log.d("Test", "This from A proc");
            }
          };
    }

    public Runnable bproc(){
        return new Runnable() {
            public void run() {
                Log.d("Test", "This from B proc");
            }
          };
    }

}
时间: 2024-10-27 02:09:21

dialog-android怎么确定对话框返回的值是true还是false?的相关文章

js-easyui 如何获取Dialog返回的值

问题描述 easyui 如何获取Dialog返回的值 function assignAuth(auth,name) { var url = "assignAuth.aspx?flag=edit&ids=" + auth; openDialog(url, "分配权限-" + name, 600, 450, 1); } 我弹出了一个Dialog分配权限,在Dialog上点确定后想返回选择的值,该如何获取到呢?Dialog是另外一个页面了 解决方案 你的url是用

android 或java函数返回值,应该如何写才对

问题描述 android 或java函数返回值,应该如何写才对 下面是我遇到的问题: 解决方案 你这样肯定不行:你在你的这个方法里面注册来一个检测器来获取你需要的string,其中的onListDepartment()方法应该只会在你的getDepartmentName 方法只会才会调用,所以你的strDepartmentNameText应该时没有更新的.所以,想要得到strDepartmentNameText方法很多呀,比如在onListDepartment()方法直接使用,或者使用handl

Android编程实现对话框Dialog背景透明功能示例

本文实例讲述了Android编程实现对话框Dialog背景透明功能.分享给大家供大家参考,具体如下: 先看效果: 这是我做的一个拨号器强的面板,拨号的时候会查询手机中的联系人,显示在拨号面板上方,点击弹出透明对话框供选择. 这次重点是透明对话框. 先看对话框的theme,style文件: <?xml version="1.0" encoding="utf-8"?> <resources> <style name="select

android应用-Android应用开发 对话框创建

问题描述 Android应用开发 对话框创建 private void showDialog(String msg){ Builder builder =**new AlertDialog.Builder(HttpUtil.this);** // AlertDialog.Builder builder =new Builder(HttpUtil.this); builder.setMessage(msg) .setCancelable(false) .setPositiveButton("确定&

hibernate-下面代码里为什么要有hidden,hidden的作用,hidden返回的值是什么?

问题描述 下面代码里为什么要有hidden,hidden的作用,hidden返回的值是什么? function login(){ var hidden=document.getElementById("hidden").value; if(document.getElementById("username"+hidden).value ==""){ alert("用户名不能为空"); return false; }else i

android微信支付总是返回-1的问题

问题描述 android微信支付总是返回-1的问题 目前问题是清空微信数据和再次签名是可以支付的,但后面就不可以支付了,这是什么原因呢? sign的值是我自己拼接的,我后台log打印的看到每次支付的sign也是不一样的. 支付返回-1是什么原因呢? 官方说错误返回码有4开头的四位数字 ,我怎么没看见? 解决方案 每次支付的sign也是不一样的 是的,sign是根据你其它参数算出来的,你的sign错了,当然返回错误. 官方文档列出的可能错误原因:签名错误.未注册APPID.项目设置APPID不正确

android-findViewById(R.id.list_view);返回null值

问题描述 findViewById(R.id.list_view);返回null值 我想在程序中显示ListView视图. 我创建了一个activity,在onCreate()方法中运行了一个AsyncTask,并打算在onPostExecute()方法中显示listView. 下面是代码片段 protected void onPostExecute(KpiResponseObject kpiReportResponse) { ListView listView; listView = (Lis

android-getLastknownLocation()在 nexus 返回null值

问题描述 getLastknownLocation()在 nexus 返回null值 我使用下面的代码来开发一个基于位置定位的项目,这个项目我是用的是google api 8. lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); currloc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); TextView t = (TextView)find

Javascript中怎么得到模式窗体返回的值

问题描述 Javascript中怎么得到模式窗体返回的值 解决方案 解决方案二:2.可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象.例如:------------------------------parent.htm<script>str=window.showModalDialog("modal.htm",,"dialogWidth=200px;dialogHeight=100px");alert(str);