自定义的EditText preference和西顿preferenceChangeListener不叫 [英] Custom EditTextPreference and setOnPreferenceChangeListener not called

查看:443
本文介绍了自定义的EditText preference和西顿preferenceChangeListener不叫的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的听众是没有得到所谓的出于某种原因?这是我有:

在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆