如何在点击任何按钮后取消首选项对话框?
我解决了我的对话框类实现了OnClickListener。
public class PassChangeDiglog extends DialogPreference implements
OnClickListener {
EditText oldpass, new_pass1, new_pass2;
public PassChangeDiglog(Context context, AttributeSet attrs) {
super(context, attrs);
setDialogLayoutResource(R.layout.pass_change_diglog);
setPositiveButtonText("OK");
setNegativeButtonText(R.string.Cancel);
}
@Override
protected void onBindDialogView(View view) {
setTitle(R.string.PassChanging);
oldpass = (EditText) view.findViewById(R.id.Dlg_old_pass);
new_pass1 = (EditText) view.findViewById(R.id.Dlg_NewPass1);
new_pass2 = (EditText) view.findViewById(R.id.Dlg_NewPass2);
super.onBindDialogView(view);
}
@Override
public void onClick(DialogInterface arg0, int arg1) {
switch (arg1) {
case DialogInterface.BUTTON_POSITIVE:
boolean needclose;
...
if (needclose)
arg0.dismiss();
else{
//do not close
}
}
};
}
我试图覆盖onDismiss方法,但是对话无论什么结束。
@Override
public void onDismiss(DialogInterface dialog) {
// TODO Auto-generated method stub
Log.d("MY","onDismiss");
//super.onDismiss(dialog);
}
答案 0 :(得分:3)
我的问题的解决方案是覆盖showDialog-method。
@Override
protected void showDialog(Bundle state) {
// TODO Auto-generated method stub
super.showDialog(state);
((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_POSITIVE)
.setOnClickListener(this);
}
答案 1 :(得分:0)
您需要添加其他侦听器after
您的对话框已经显示。
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(
new View.OnClickListener()
{
@Override
public void onClick(View view)
{
// do your magic
}
});
要使其与Preference一起使用,请使用强制转换为AlertDialog:
(AlertDialog)dialog.getButton(AlertDialog.BUTTON_POSITIVE)