1

チェックボックスがクリックされているかどうかのユーザー設定を Activity に保存しようとしていますが、アプリをシャットダウンして再起動すると、目的の結果が得られません。つまり、ユーザーがチェックボックスをオンにした場合、再起動時にチェックされていません。

これが私が試したことです:

public void onCreate()
{
  ....
  checkbox=(CheckBox)findViewById(R.id.checkbox);



 // storing the user preference
    SharedPreferences sharedpref = getSharedPreferences(MYPREF,Activity.MODE_PRIVATE); //here MYPREF is the name of the file storing the preference
    SharedPreferences.Editor e = sharedpref.edit();
    e.putBoolean("checkboxvalue", checkbox.isChecked());
    e.commit();

  //retrieving the preference set
    SharedPreferences mysharedpref = getSharedPreferences(TextSpeaker.MYPREF,Activity.MODE_PRIVATE);
    checked=mysharedpref.getBoolean("checkboxvalue", false);
    if(checked)checkbox.setChecked(true);
4

3 に答える 3

4

多くのアプリケーションは、特定のアプリケーションまたはアクティビティの設定に関するユーザー設定をキャプチャする方法を提供する場合があります。これをサポートするために、Android は単純な一連の API を提供します。

プリファレンスは通常、名前と値のペアです。これらは、アプリケーション内のさまざまなアクティビティで「共有設定」として保存できます (現在、プロセス間で共有できないことに注意してください)。または、アクティビティに固有に保存する必要があるものである場合もあります。

  1. 共有設定: 共有設定は、アプリケーションのすべてのコンポーネント (アクティビティ、サービスなど) で使用できます。

  2. アクティビティ処理設定: これらの設定は、アクティビティでのみ使用でき、アプリケーションの他のコンポーネントでは使用できません。

共有設定:

共有設定は、クラスのgetSharedPreferencesメソッドを使用して管理されます。Context設定はデフォルトのファイル (1) に保存されるか、設定を参照するために使用されるファイル名 (2) を指定できます。

(1) ファイル名を指定してインスタンスを取得する方法は次のとおりです。

public static final String PREF_FILE_NAME = "PrefFile";
   SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATEプリファレンスの動作モードです。これはデフォルトのモードであり、作成されたファイルには呼び出し元のアプリケーションのみがアクセスできることを意味します。サポートされている他の 2 つのモードはMODE_WORLD_READABLE、 とMODE_WORLD_WRITEABLEです。他MODE_WORLD_READABLEのアプリケーションでは、作成したファイルを読み取ることはできますが、変更することはできません。他のアプリケーションの場合MODE_WORLD_WRITEABLE、作成したファイルへの書き込み権限も持っています。

(2)ファイル名を指定せずに、デフォルトモードで使用することをお勧めします

SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context);

最後に、設定インスタンスを取得したら、保存された値を設定から取得する方法を次に示します。

 int storedPreference = preferences.getInt("storedInt", 0);

設定ファイルにを保存するには、SharedPreference.Editorオブジェクトを使用する必要があります。クラスEditorのネストされたインターフェースです。SharedPreference

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

エディタは、 ファイルから設定値を削除するremove()や などのメソッドもサポートしています。clear()

アクティビティの設定:

共有設定は、他のアプリケーション コンポーネントで使用できます。ただし、設定を他のコンポーネントと共有する必要がなく、アクティビティをプライベートな設定にしたい場合。getPreferences()アクティビティのメソッドの助けを借りてそれを行うことができます。getPreferenceメソッドはgetSharedPreferences()、設定ファイル名にアクティビティ クラスの名前を付けたメソッドを使用します。

以下は、設定を取得するためのコードです

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

値を格納するコードも、共有設定の場合と同じです。

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

アクティビティの状態をデータベースに保存するなど、他の方法を使用することもできます。注 Android には、 というパッケージも含まれていますandroid.preference。このパッケージは、アプリケーション設定 UI を実装するクラスを定義します。

他の例を確認するには、開発者サイトの Android のデータ ストレージの投稿を確認してください。

于 2010-07-23T08:46:51.047 に答える
0

2 つの異なるコンポーネント (アクティビティなど) があるように見えるため、おそらく 2 つの個別のプリファレンス データ ファイルを操作しています。

の代わりにgetDefaultSharedPreferences()(で利用可能)を使用するように切り替えてみて、それが役立つかどうかを確認してください。PreferenceManagergetSharedPreferences()

于 2010-06-25T17:39:01.650 に答える
0

こんにちは Pranay 他のアクティビティまたはアプリで同じ名前のプリファレンスを以前に作成した場合、同じプリファレンスの変更を MODE_WORLD_READABLE に読み取る際に問題が発生します。

getSharedPreferences(MYPREF,Activity.MODE_WORLD_READABLE);

また

getSharedPreferences(MYPREF,1);
于 2010-06-25T17:59:11.870 に答える