0

ユーザー定義の設定を別の設定(カンマ区切り)で保存しても大丈夫ですか、それともよりクリーンでより良い方法がありますか?

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory android:key="client" android:title="@string/client">

        <PreferenceScreen
            android:key="manage_sources"
            android:title="@string/manage_sources"
            android:persistent="false">

            <com.example.preference.EditSourcePreference
                android:key="add_source"
                android:title="@string/add_source"
                android:dialogTitle="@string/add_source" />

            <PreferenceCategory
                android:key="sources"
                android:title="@string/sources" />

        </PreferenceScreen>

    </PreferenceCategory>

</PreferenceScreen>

これは、ソースを追加するための設定を提供するネストされたPreferenceScreenです。Javaコードは次のとおりです。

public class EditSourcePreference extends EditTextPreference implements TextWatcher {

    private EditText source;
    private Button positiveButton;

    private String originalSource;

    public EditSourcePreference(Context context) {
        super(context);
    }

    public EditSourcePreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void showDialog(Bundle state) {
        super.showDialog(state);

        source = getEditText();
        source.addTextChangedListener(this);

        positiveButton = ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_POSITIVE);
        afterTextChanged(source.getText());

        originalSource = source.getText().toString();
    }

    @Override
    protected void onDialogClosed(boolean positiveResult) {
        if (!positiveResult) {
            return;
        }

        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getContext());
        SharedPreferences.Editor editor = pref.edit();

        String sources = pref.getString("sources", ""),
                newSource = source.getText().toString();

        boolean append = sources.indexOf(originalSource) != -1; // TODO: needs debugging!!!

        if (append) {
            if (!"".equals(sources)) {
                sources += ";";
            }

            sources += newSource;
        } else {
            sources = sources.replace(originalSource, newSource);
        }

        editor.putString("sources", sources);
        editor.commit();

        super.onDialogClosed(positiveResult);
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }

    @Override
    public void afterTextChanged(Editable s) {
        positiveButton.setEnabled(s.toString().matches("^[a-z0-9_:/]+[.]+[a-z0-9_.:/]+$"));
    }

}

これは次のようになり、エントリを編集および削除することで拡張されます。 それはどのように見えるか

4

2 に答える 2

0

SharedPreferences.Editorを参照してください。ご不明な点がございましたら、お気軽にお問い合わせください。

編集:申し訳ありませんが、どういうわけか、貼り付けたコードが最初に読み込まれませんでした。ここでは、jiffyに保存されたファイルから設定を取得する方法を紹介します。

申し訳ありませんが、エラーが発生した場合は、メモ帳に入力しました。

private final String PREFS_NAME = "prefs";

private final String KEY_AGE = "age";
private final String KEY_COUNTRY = "location";

  SharedPreferences sharedPreferences = ctx.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
  SharedPreferences.Editor editor = sharedPreferences.edit();

  editor.putInt(KEY_AGE, "13");
  editor.putString(KEY_COUNTRY, "USA");

  editor.commit();

// To retrieve the values

  SharedPreferences sharedPreferences = ctx.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
  sharedPreferences.getInt(KEY_AGE, 0);
  sharedPreferences.getString(KEY_COUNTRY, 0);

これがニーズに合わない場合は、データベースを使用してください。

于 2013-02-26T12:46:48.733 に答える
0

SharedPreferencesを使用して値を保存できます。あなたはこれを参照することができます:http://developer.android.com/reference/android/content/SharedPreferences.html

これらを参照することもできます:

AndroidでSharedPreferencesを使用して値を保存、フェッチ、編集する方法

SharedPreferencesの使用方法

共有設定エディターの使用

http://developer.android.com/guide/topics/data/data-storage.html

于 2013-02-26T12:52:01.580 に答える