如果未选择任何选项,则不应关闭DialogPreference

时间:2010-02-01 20:17:46

标签: android

我有一个DialogPreference,我想在按“确定”,“取消”等时避免用户关闭它。

我该怎么做?

编辑:

我尝试在创建对话框时触摸确定按钮以禁用。但我无法做到:(

6 个答案:

答案 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,那么也没有任何改变。

软件应该使特定任务更容易,而不是强迫用户自己处理应用程序逻辑。