我的听众因某种原因没有被召唤?这就是我所拥有的:
在Preference文件中,我有一个自定义的EditTextPreference:
<com.xxx.yyy.preference.PreferenceEditTextDialog
android:layout="@layout/preference_edit"
android:title="@string/title"
android:summary="@string/summary"
android:defaultValue=""
android:dialogTitle="@string/dialogTitle"
android:key="mypref"/>
我扩展课程:
public class PreferenceEditTextDialog extends EditTextPreference {
启动我的活动:
startActivity(new Intent(this, PrefsActivity.class));
定义:
public class PrefsActivity extends PreferenceActivity implements
OnPreferenceClickListener, OnSharedPreferenceChangeListener {
在这里,我注册了我的setOnPreferenceChangeListener(未被调用)。
但是更改我的首选项文件:
<com.xxx.yyy.preference.PreferenceEditTextDialog
默认:
<EditTextPreference
一切正常。有人可以帮助我找到问题,不知何故,使用我的自定义首选项不能正确传播监听器。
谢谢!
@Sam这是我的听众定义:
myfield = (EditTextPreference) getPreferenceScreen().findPreference(KEY_PREFERENCE);
myfield.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Boolean valid = true;
if(!validate(newValue.toString())) {
valid = false;
}
return valid;
}
});
答案 0 :(得分:5)
找到一个解决方案,在我的自定义EditTextPreference中添加了对callChangeListener(value)的调用:
@Override
public void onBindDialogView(View view) {
edittext = (EditText) view.findViewById(R.id.edittext);
edittext.setText(PreferenceManager.
getDefaultSharedPreferences(view.getContext()).
getString(getKey(), ""));
ok_button = (Button) view.findViewById(R.id.ok_button);
ok_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String value = edittext.getText().toString();
if(callChangeListener(value)) {
Editor editor = getEditor();
editor.putString(getKey(), value);
editor.commit();
getDialog().dismiss();
}
}
});