2012-11-21 58 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(); 
     } 
    } 
});