私はCheckBoxPreference
の簡単な拡張を作成して、タイトルの左側にイメージアイコンを持つ独自のカスタムビューを持つことができました。コードは以下の通りです:setOnPreferenceChangeListenerがカスタムcheckboxpreferenceで機能していない
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);
}
問題は、何らかの理由で、私はどのCustomCheckboxPreference
に設定OnPreferenceChangeListener
は効果がありませんし、保存されていないということです。私はいくつかのアンドロイドメソッドをオーバーライドして、superを呼び出し、次に何が呼び出されるかを見るためにラインを印刷する実装を試みました。特にcallChangeListener
は呼び出されません。 onPreferenceChanged
のコールバックにつながるのはこのメソッドです。私はちょうど何が起こるか見るためにsetCheckedのonPreferenceChanged
内部への呼び出しに投げてみましたとOnPreferenceChangeListener
がnullである:私は少し混乱しています
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;
}
});
:
getOnPreferenceChangeListener().onPreferenceChange(this, checked);
これは私がpreferencechangelistenerを設定する方法ですなぜ私はonBindView
とコンストラクタを上書きするだけなので、preferencechangelistener
が正常に動作しないのですか?私は両方のスーパーを呼び出します。何かご意見は?
このチェックボックスをオンにすると、環境設定が更新されますか?チェックボックスにonCheckChangedListenerを設定する必要はありませんか? – LuxuryMode