我做了一個簡單的擴展CheckBoxPreference
,這樣我就可以在標題左側有一個圖像圖標的自定義視圖。代碼如下:setOnPreferenceChangeListener不能用於自定義複選框首選項
public class CustomCheckBoxPreference extends CheckBoxPreference {
private Drawable icon;
public CustomCheckBoxPreference(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.CustomCheckBoxPreference, 0, 0);
icon = arr.getDrawable(R.styleable.CustomCheckBoxPreference_icon);
setLayoutResource(R.layout.custom_checkbox_pref);
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
ImageView prefsIcon = (ImageView) view.findViewById(R.id.prefs_icon);
prefsIcon.setImageDrawable(icon);
}
的問題是,由於某種原因,我OnPreferenceChangeListener
設置爲任何CustomCheckboxPreference
沒有效果,而不是存儲。我試着重寫一些調用super的實現的android方法,然後打印一行來查看調用的內容。值得注意的是callChangeListener
沒有被調用。正是這種方法導致onPreferenceChanged
的回調。我試着打電話拋下onPreferenceChanged
內setChecked的只是爲了看看會發生什麼和OnPreferenceChangeListener
爲空:
getOnPreferenceChangeListener().onPreferenceChange(this, checked);
這是我如何設置preferencechangelistener:
mTwitterPref.setChecked(!mTwitter.needsAuth());
mTwitterPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
System.out.println("Twitter Preference Changed!");
if ((Boolean) newValue) {
if (mTwitter.needsAuth()) {
System.out.println("We Need To Login To Twitter!");
IntentUtils.startActivityForResult(ProfileAccountsActivity.this,
TwLoginActivity.class, ACTIVITY_OAUTH);
}
} else {
showDialog(DIALOG_LOGOUT_TWITTER);
}
return false;
}
});
我有點困惑至於爲什麼preferencechangelistener
不能正常工作,因爲我只覆蓋了onBindView
和構造函數;我都叫超級。有什麼想法嗎?
您希望在複選框被選中時更新前導?你不需要在你的複選框上設置onCheckChangedListener? – LuxuryMode