共有設定に非常に奇妙な問題があります。ユーザーIDやさまざまな設定などを保存するためにそれらを使用しています。ユーザーがメニューの項目をクリックした場合にフラグメントを切り替えるアクティビティを使用しています ( Menu-Drawerを使用しています)。
ログインするたびに、ユーザープロファイルを保存します。これは完璧に機能します。これを行った後、アプリを再起動してメモリから強制終了できます。デバイスを再起動しても、値は引き続き保存されます。しかし、フラグメントを切り替えると、たとえば、ホーム ビューでメニューの [アプリについて] をクリックすると、すべてが消えてしまいます。私の価値観は空です。
さらに奇妙なことに、すでにホームビューにいる間にホームアイテムを選択してアクティビティにフラグメントを強制的にリロードさせると、フラグメントはまだ保存されています。それを別のタイプのフラグメントに置き換えた場合にのみ、すべてが失われます。
アプリがこのように動作する理由がわかりません。それはすべて、同じコンテキストの同じアクティビティにあります。私は常に getActivity を使用して、フラグメント内のコンテキストを取得しています。
これを保存するコードの簡略化されたスニペットを次に示します。
public static void storeUserProfile(Context context, LoginEvent event, String userId, String emailAddress, String passwordHash) {
SharedPreferences userPrefs = context.getSharedPreferences(AppConfig.USER_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userPrefs.edit();
editor.clear();
editor.putString("username", event.userName);
editor.putString("id", userId);
editor.putString("email", emailAddress);
editor.commit();
}
これは、フラグメントを切り替える方法です。
HomeFeedFragment fragment = new HomeFeedFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.commit();