我在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