2012-11-21 33 views
2

由于某种原因,我的监听器没有被调用?这是我有:自定义EditTextPreference和setOnPreferenceChangeListener未调用

在首选项文件我有一个自定义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

我的第一个猜测是,这个问题是在听众中。发布在你的问题。 – Sam

+0

我更新了我的帖子,但是我保留了所有的代码,除了将偏好设置文件改回到 powder366

+0

你是否在你的自定义类中重写'setOnPreferenceChangeListener()'或类似的东西? – Sam

回答

5

找到了解决办法,在我的自定义EditTextPreference我添加了一个调用callChangeListener(值):

@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(); 
     } 
    } 
});