我有一个DialogPreference,我想在按“确定”,“取消”等时避免用户关闭它。
我该怎么做?
编辑:
我尝试在创建对话框时触摸确定按钮以禁用。但我无法做到:(
答案 0 :(得分:8)
解决方案非常简单。覆盖showDialog
并将您自己的点击监听器设置为您要拦截的按钮。
@Override
protected void showDialog(Bundle bundle) {
super.showDialog(bundle);
Button pos = ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_POSITIVE);
pos.setOnClickListener(...);
}
在您的点击监听器中,您可以进行所需的验证。
答案 1 :(得分:3)
调整可能是创建一个自定义对话框,您可以在其中定义自己的按钮(确定和关闭)。
public class YourClass implements OnClickListener {
private Button DialogButton;
private Dialog dialog;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.MainLayout);
/* Your code... */
DialogButton = (Button) findViewById(R.id.DialogButtonId);
DialogButton.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.DialogButtonId:
LayoutInflater inflater = LayoutInflater.from(YourClass.this);
final View inflay = inflater.inflate(R.layout.DialogLayout, (ViewGroup) findViewById(R.id.RootIdOfDialogLayout));
TextView YourTextView = (TextView) inflay.findViewById(R.id.TextViewId);
Button cancel = (Button) inflay.findViewById(R.id.CancelButtonId);
cancel.setOnClickListener(YourClass.this);
Button ok = (Button) inflay.findViewById(R.id.OkButtonId);
ok.setOnClickListener(YourClass.this);
dialog = new Dialog(YourClass.this);
dialog.setContentView(inflay);
dialog.setTitle(getString(R.string.TitleStringId));
dialog.show();
break;
case R.id.CancelButtonId:
/* Checking if the user selected an option if true call dialog.dismiss() */
break;
case R.id.OkButtonId:
/* Here handle your preferences (e.g. putString(String key, String value)) */
/* Checking if the user selected an option if true call dialog.dismiss() */
break;
}
}
}
签出http://developer.android.com/reference/android/content/SharedPreferences.Editor.html以便在onClick中处理您的偏好。我没有测试这段代码只是写它来告诉你如何解决它!
对话框保持打开状态,直到您调用dialog.dismiss();.在这种情况下,您必须创建下拉菜单,民意调查或您希望在布局文件中显示的内容。按ok或取消后,您应检查用户是否做出选择,并将该选项解析为您的首选项。 (查看上面的链接)
RGDS 莱恩
答案 2 :(得分:1)
您可以尝试再次打开它。
为什么要阻止用户关闭对话框?用户应该能够“完全”控制他们的设备。
答案 3 :(得分:1)
您可以在此处查看DialogPreferences的源代码:
https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/preference/DialogPreference.java
然后,将大部分内容复制到您的代码中,根据需要修改代码。
答案 4 :(得分:0)
如何覆盖onDismiss()
方法并使用您想要发生的验证实现canExit()
方法?例如。 :
public class MyDialogPref extends DialogPreference {
@override public void onDismiss(DialogInterface dialog) {
if (canExit()) {
super.onDismiss(dialog);
}
}
...
}
答案 5 :(得分:0)
良好的用户界面应该已经选择了默认选项/选项(以前用户输入的选项或默认的程序)。
在选项中显示一个要求更改的对话框,而不会显示您已有的内容,这是错误的UI设计。
这样,如果用户单击“取消”,则不会发生任何更改,他们会看到所选的选项是什么。如果他们没有做任何改变并点击OK,那么也没有任何改变。
软件应该使特定任务更容易,而不是强迫用户自己处理应用程序逻辑。