使用 SharedPreferences 存储数据

Store data with SharedPreferences

我正在尝试使用 SharedPreferences
存储一些数据 存储数据的方法:

    public void storeSharedPreferences(String string) {
    SharedPreferences sharedPreferences = getSharedPreferences("DATA",MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putString("FRAGMENT",string);
    editor.apply();

}

获取数据的方法:

    public String getSharedPreferences() {
    SharedPreferences sharedPreferences = getSharedPreferences("DATA",MODE_PRIVATE);
    String string = sharedPreferences.getString("FRAGMENT","ONE");
    return string;
}

片段一和片段二的方法:

 public void buttonSelect(String select) {
    if (select == "ONE") {
       storeSharedPreferences("ONE");


        fragment = new OneFragment();
        fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.frame_process, fragment, "OneFragment").addToBackStack(null).commit();

    }
    if (select == "TWO") {

        storeSharedPreferences("TWO");

        fragment = new TwoFragment();
        fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.frame_process, fragment, "TwoFragment").addToBackStack(null).commit();

    }
}

然后我首先调用了这个方法

buttonSelect(getSharedPreferences());

一切正常,例如当用户处于片段二并退出应用程序时 下次将从片段二开始
但问题是你使用菜单关闭应用程序(按菜单按钮并清除所有应用程序),下次你打开应用程序时没有任何反应,似乎这个方法从未被调用过

buttonSelect(getSharedPreferences());

我能做什么? 谢谢

最初,使用 editor.commit(); 而不是 editor.apply();

接下来,逻辑可能是这样的:

  1. 首次启动应用程序时,创建共享首选项并将最后一个片段标志保存为 0。这意味着用户位于主页片段。
  2. 每当用户浏览应用程序时,将片段编号保存在共享首选项中。所以这将继续为用户更新最后导航的片段。
  3. 下次启动该应用程序时,它将与最后一个片段编号共享首选项,从共享首选项中获取最后一个导航片段并将其传递给您的方法buttonSelect
  4. 您的方法 buttonSelect 然后将加载特定片段。

注意:不要忘记在应用程序启动时 activity 中调用方法 buttonSelect,可以是 onCreate() 也可以是 onStart 哦,我完全忘记了,Java 中的字符串比较应该通过 string.equals() 函数而不是双等号

来完成