0

検証のために、共有設定/設定画面で誰かが入力しているものを確認する方法があるかどうかを知りたいです。ユーザーがIP入力オプションに触れると、編集テキストダイアログがポップアップし、入力できるものを標準のIPアドレス(つまり、0-255.0-255.0-255.0-255)のようなものに制限しようとしています。私は数多くのオンラインフォーラムを見てきましたREGEXとパターンを使用したさまざまな例を見ましたが、これは私がこれまでに持っているものですが、まったく何も起こっていません....誰か助けてもらえますか? よろしくお願いします!

    public class PrefsActivity extends PreferenceActivity implements
        OnSharedPreferenceChangeListener
{
    private EditTextPreference ipTextBox;
    private String whatWasTyped;
    private String previousText = "";
    private Editor myEditor;

    final Pattern IP_ADDRESS = Pattern
            .compile("^((1\\d{2}|2[0-4]\\d|25[0-5]|\\d?\\d)\\.){3}(?:1\\d{2}|2[0-4]\\d|25[0-5]|\\d?\\d)$");
    private String IP_FROM_PREFS = "ipAddressPref";
    SharedPreferences prefs;

    @Override
    /**
     * The onCreate method handles thing when starting this activity, 
     * mainly display the activity_settings.xml.
     */
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        // pattern for IP address validation
        addPreferencesFromResource(R.layout.activity_settings);

        // prefs.registerOnSharedPreferenceChangeListener(this);

        prefs = PreferenceManager.getDefaultSharedPreferences(this);
        // Get a reference to the preferences
        ipTextBox = (EditTextPreference) getPreferenceScreen().findPreference(
                IP_FROM_PREFS);

    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key)
    {
        // check prefs value for IP.

        if (key.equals(IP_FROM_PREFS))
        {

            whatWasTyped = prefs.getString(IP_FROM_PREFS, "");
            CharSequence s = whatWasTyped;
            if (IP_ADDRESS.matcher(s).matches())
            {
                previousText = s.toString();
                            myEditor = prefs.edit();
                            myEditor.putString(IP_FROM_PREFS, previousText);
                myEditor.commit();

            } else
            {
                //if the format does not match, put up an error message
                            // or something.

            }
        }

    }

    @Override
    protected void onResume()
    {
        super.onResume();

        // Setup the initial values
        // mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(key,
        // false) ? "Disable this setting" : "Enable this setting");
        // mListPreference.setSummary("Current value is " +
        // sharedPreferences.getValue(key, ""));

        // Set up a listener whenever a key changes
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(this);
        previousText = prefs.getString(IP_FROM_PREFS, "");
    }

    @Override
    protected void onPause()
    {
        super.onPause();

        // Unregister the listener whenever a key changes
        getPreferenceScreen().getSharedPreferences()
                .unregisterOnSharedPreferenceChangeListener(this);
    }

}

これは共有設定画面で作成されたものなので、ボタンIDなどはありません...

4

1 に答える 1

0

ただ書いている

 whatWasTyped.replace(s, previousText);

以前のテキストを共有設定に割り当ててコミットする必要がある SharedPreference に割り当てません。

于 2012-08-03T19:46:34.957 に答える