2017-06-05 96 views
2

我有一个密码对话框类,当他们想要删除或添加时要求输入密码。我想要的是可以一次又一次地重复使用这个对话框。
继承人我的密码的对话框类看起来像
如何使用DialogFragment返回true或false?

public static class myPasswordDialog extends DialogFragment { 

     @NonNull 
     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
      LayoutInflater inflater = getActivity().getLayoutInflater(); 
      builder.setView(inflater.inflate(R.layout.password_dialog, null)) 
        .setPositiveButton(R.string.delete, new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int id) { 
          EditText passField = (EditText) ((AlertDialog) dialog).findViewById(R.id.password); 
          String password = passField.getText().toString(); 
          if (password.matches(getString(R.string.pass_key))) { 

           //it should do something when it is correct 
          } else { 
           Toast.makeText(getActivity(), "Wrong Password", Toast.LENGTH_SHORT).show(); 
          } 
         } 
        }) 
        .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          dialog.dismiss(); 
         } 
        }); 
      return builder.create(); 
     } 
    } 

,这是我怎么称呼我的密码类

deletebtn.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         myPasswordDialog mPasswordDialog = new myPasswordDialog(); 
         mPasswordDialog.show(getFragmentManager(), "delete"); 
        } 
       }); 

我心目中是该片段将返回一个布尔值,如果他们输入正确的或错误的密码。但是我能以什么方式做到这一点?

回答

2

实现一个接口,并设置一个回调

public static class MyPasswordDialog extends DialogFragment { 
    public interface MyCallBack { 
     public void onResult(boolean b); 
    } 

    public MyCallBack callBack; 

    public MyPasswordDialog(MyCallBack callBack) { 
     this.callBack = callBack; 
    } 

    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // your code 

    public void onClick(DialogInterface dialog, int id) { 
     EditText passField = (EditText) ((AlertDialog) dialog).findViewById(R.id.password); 
     String password = passField.getText().toString(); 
     if (password.matches(getString(R.string.pass_key))) { 
      callBack.onResult(true); // pass false depends on condition 
     } else { 
     // code 
     } 
    } 

    } 

} 

如何调用

deletebtn.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        myPasswordDialog mPasswordDialog = new MyPasswordDialog(new MyPasswordDialog() { 
         @Override 
         public void onResult(boolean result) { 
         // result will be your ans 
         } 
        }); 
        mPasswordDialog.show(getFragmentManager(), "delete"); 
       } 
      }); 
+0

感谢队友。我刚刚意识到我可以使用:D –