自定义的EditText preference和西顿preferenceChangeListener不叫 [英] Custom EditTextPreference and setOnPreferenceChangeListener not called
问题描述
我的听众是没有得到所谓的出于某种原因?这是我有:
在preference文件我有一个自定义的EditText preference:
< com.xxx.yyy preference preferenceEditTextDialog
机器人:布局=@布局/ preference_edit
机器人:标题=@字符串/标题
机器人:总结=@字符串/摘要
机器人:设置defaultValue =
机器人:DIALOGTITLE =@字符串/ DIALOGTITLE
机器人:键=我的preF/>
我致以类:
公共类preferenceEditTextDialog延伸的EditText $ P $ {pference
启动我的活动:
startActivity(新意图(这一点,prefsActivity.class));
定义:
公共类prefsActivity扩展preferenceActivity工具
在preferenceClickListener,OnShared $ P $ {pferenceChangeListener
在这里注册我挂线preferenceChangeListener(这不叫)。
不过从改变我的preference文件:
< com.xxx.yyy preference preferenceEditTextDialog
为默认设置:
< EditText上preference
这一切的作品。可能有人帮我找到了问题,不知怎么使用我的自定义preference听者不会传播正确的。
谢谢!
@Sam这里我的听众定义:
MyField的=(EditText上preference)获取preferenceScreen()找到preference(KEY_ preFERENCE);
myfield.setOn preferenceChangeListener(新在preferenceChangeListener(){ @覆盖
在preferenceChange公共布尔(preference preference,对象为newValue){
布尔有效= TRUE;
如果(!的validate(newValue.toString())){
有效= FALSE;
}
返回有效的;
}
});
找到了解决办法,在我的自定义的EditText preference我添加了一个调用callChangeListener(值):
@覆盖
公共无效onBindDialogView(查看视图){
的EditText =(EditText上)view.findViewById(R.id.edittext);
edittext.setText(preferenceManager。
getDefaultShared preferences(view.getContext())。
的getString(getKey(),));ok_button =(按钮)view.findViewById(R.id.ok_button);
ok_button.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(视图v){
字符串值= edittext.getText()的toString()。
如果(callChangeListener(值)){
编辑编辑= getEditor();
editor.putString(getKey(),价值);
editor.commit();
getDialog()驳回()。
}
}
});
My listener is not getting called for some reason? This is what I have:
In Preference file I have a custom 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"/>
I extend my class:
public class PreferenceEditTextDialog extends EditTextPreference {
Launching my Activity:
startActivity(new Intent(this, PrefsActivity.class));
Definition:
public class PrefsActivity extends PreferenceActivity implements
OnPreferenceClickListener, OnSharedPreferenceChangeListener {
In here I register my setOnPreferenceChangeListener (which is not called).
However changing my Preference file from:
<com.xxx.yyy.preference.PreferenceEditTextDialog
to default:
<EditTextPreference
it all works. Could someone help me to find the problem, somehow the listener is not propagated properly using my custom Preference.
Thanks!
@Sam Here my listener definition:
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;
}
});
Found a solution, in my custom EditTextPreference I added a call to 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();
}
}
});
这篇关于自定义的EditText preference和西顿preferenceChangeListener不叫的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!