我在PreferenceActivity
中有一个EditPreference
,我有一个变量告诉我是否应允许用户访问此首选项或显示某些警报。Android首选项 - 替换首选项功能
我的问题是,我找不到如何取消首选项对话框,并显示我的警报(根据变量)。
我试图在首选项onClick
或onTreeClick
中返回true/false,但那没做任何事,对话框仍然弹出。
在Android 2.1+上。
谢谢。
我在PreferenceActivity
中有一个EditPreference
,我有一个变量告诉我是否应允许用户访问此首选项或显示某些警报。Android首选项 - 替换首选项功能
我的问题是,我找不到如何取消首选项对话框,并显示我的警报(根据变量)。
我试图在首选项onClick
或onTreeClick
中返回true/false,但那没做任何事,对话框仍然弹出。
在Android 2.1+上。
谢谢。
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
类本身。
顺便说一句,你肯定可以改善与标志等。这只是一个例子。 – davidcesarino 2012-07-21 15:39:08