0

我有一个EditPreferencein a PreferenceActivity,我有一个变量告诉我是否应该允许用户访问此首选项或显示一些警报。

我的问题是我找不到如何在显示之前取消首选项对话框并显示我的警报(根据变量)。

我试图在首选项onClick或中返回真/假,onTreeClick但没有做任何事情,对话框仍然弹出。

在安卓 2.1+ 上。

谢谢。

4

1 回答 1

2

DialogPreference.onClick()处理对首选项本身的点击的 是,protected因此您不能在自己的PreferenceActivity类成员中覆盖它。

但是,您可以扩展该类来实现您所需要的。下面是一个非常简约的例子:

package com.example.test;

import android.content.Context;
import android.preference.EditTextPreference;
import android.util.AttributeSet;

public class MyEditTextPreference extends EditTextPreference {

    private Runnable alternative = null;

    public MyDatePickerDialog(Context context, 
            AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MyDatePickerDialog(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyDatePickerDialog(Context context) {
        super(context);
    }

    public void setAlternativeRunnable(Runnable runnable) {
        alternative = runnable;
    }

    // this will probably handle your needs
    @Override
    protected void onClick() {
        if (alternative == null) super.onClick();
        else alternative.run();
    }

}

在您的 XML 文件中:

<com.example.test.MyEditTextPreference
        android:key="myCustom"
        android:title="Click me!" />

在你的PreferenceActivity

MyEditTextPreference pref = (MyEditTextPreference) this.findPreference("myCustom");
pref.setAlternativeRunnable(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(getApplication(), "Canceled!", Toast.LENGTH_SHORT)
                .show();
    }
});

作为最后一点,让我说,当你找不到一种方法来做你想做的事时,考虑看看 Android 类本身是如何工作的。大多数时候,他们会给你很好的见解来实现你想要的。

在这种情况下,就是DialogInterface.onClick()方法,如上所述。所以你知道你需要以某种方式覆盖它来实现这一点。在这种情况下,解决方案是扩展EditTextPreference类本身。

于 2012-07-21T15:37:37.690 回答