Android Confirmation dialog returning true or false

前端 未结 8 1273
不知归路
不知归路 2020-12-09 05:40

It seems to be there is no easy way to get an Alert dialog to return a simple value.
This code does not work (the answer variable cannot be set

8条回答
  •  甜味超标
    2020-12-09 06:14

    i have post similiar problem in this forum, but finally i get my answer. my problem in that post is how to create separate confirm dialog class who can acces by other class or activity, so with that confirm dialog class we don't need to write long coding.

    here's my answer.

    First you must create 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;
        }
    }
    

    And this is example to call it in another class

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

提交回复
热议问题