1

谁能告诉我这段代码有什么问题。由于某种原因,在更改值时未调用 OnSharedPreferencesChanged。我正在尝试检查输入的 PIN 是否等于 2 位数字。但是因为它不起作用..任何人都可以帮助我。

谢谢。!

import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.util.Log;
import android.widget.Toast;

public class PrefsActivity extends PreferenceActivity implements
        OnSharedPreferenceChangeListener {

    EditTextPreference editPreference;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
        this.editPreference = ((EditTextPreference) getPreferenceScreen()
                .findPreference("userPass"));
        Log.d("TAG","before sharedPreferenceChanged");
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Set up a listener whenever a key changes
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        // Unregister the listener whenever a key changes
        getPreferenceScreen().getSharedPreferences()
                .unregisterOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {
        Log.d("TAG","In SharedPreferences");
        if (sharedPreferences.getString("userPass", null).length() != 2) {
            Log.d("TAG","lenght is less than 1");

            Toast.makeText(this, "Pin has to be 2 digits only",
                    Toast.LENGTH_LONG).show();
            this.editPreference.setText(null);
            return;
        } else {
            Toast.makeText(this, "Pin set", Toast.LENGTH_LONG).show();
        }
        // TODO Auto-generated method stub

    }
4

1 回答 1

0

尝试在 onCreate() 中为您的 editPreference 设置setOnPreferenceChangeListener,将您的验证代码放入此回调中。

阅读文档,他们说OnSharedPreferenceChangeListener在共享首选项发生更改(已更改)时被调用。另一方面,触发 setOnPreferenceChangeListener “当用户更改此 Preference 时(但在更新内部状态之前)”

于 2013-07-20T04:38:30.383 回答