2

何らかの理由でリスナーが呼び出されませんか? これは私が持っているものです:

設定ファイルには、カスタム 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;
        }
    });
4

1 に答える 1

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();
        }
    }
});
于 2013-01-10T21:32:06.913 に答える