【问题标题】:Switch fragment using bottom navigation controller without losing data使用底部导航控制器切换片段而不丢失数据
【发布时间】:2020-03-24 03:17:53
【问题描述】:

我刚刚开始使用 Android 进行开发。我现在面临的第一个挑战是如何在使用 BottomNavigationController(由 Android Studio 自动生成)在片段之间切换时保存片段数据

我曾尝试使用 ViewModel,但由于每次切换时都会调用 onDestroy(),因此数据也会丢失。 onSaveInstanceState() 在切换片段时也不会被调用。

我在网上看到的很多方法或解决方案都使用了已弃用的函数(由于我只是一个初学者,我不知道现在使用的新函数是什么)

我希望有人可以帮助我解决这个问题!谢谢!

【问题讨论】:

    标签: android android-fragments navigation android-fragmentactivity


    【解决方案1】:

    当一个片段被改变时,它不会被销毁,而是被添加到后台堆栈中。所有实例变量都保留在那里。 您可以在 onActivityCreated 方法中检索数据。 这是一个例子:

    
    public class ExampleFragment extends Fragment
    
     { 
    
    private List<String> myData;
    
     @Override public void onSaveInstanceState(final Bundle outState)
     { 
    
    super.onSaveInstanceState(outState);
    
     outState.putSerializable("list", (Serializable) myData); 
    
    }
    
     @Override
    
     public void onActivityCreated(Bundle savedInstanceState)
     { 
    
    super.onActivityCreated(savedInstanceState);
    
     if (savedInstanceState != null) { 
    
     myData = (List<String>) savedInstanceState.getSerializable("list"); } 
    
    else { if (myData != null)
    
     { //returning from backstack} 
    
    else 
    
    {  myData = computeData(); } } } }
    
    

    编辑:- 您还可以使用共享首选项。 示例:-

    
    SharedPreferences shared ;
    
     shared = getSharedPreferences("prefs", Context.MODE_PRIVATE);
     shared.edit().putString("JSON",jsonString).commit(); 
    
    
    
    

    在此处阅读有关使用共享首选项存储和检索数据的更多信息:https://www-geeksforgeeks-org.cdn.ampproject.org/v/s/www.geeksforgeeks.org/shared-preferences-in-android-with-examples/amp/?amp_js_v=a3&amp_gsa=1&usqp=mq331AQFKAGwASA%3D#aoh=15850227567178&referrer=https%3A%2F%2Fwww.google.com&amp_tf=From%20%251%24s&ampshare=https%3A%2F%2Fwww.geeksforgeeks.org%2Fshared-preferences-in-android-with-examples%2F

    【讨论】:

    • 这是我尝试的第一件事,但没有成功。然后我尝试将 Log.d("onSaveInstance","Saved") 放在“onSaveInstanceState()”中,因为我不确定何时调用它。在我按下主页按钮之前,该消息从未出现在我的控制台中。
    • 这就是我觉得奇怪的地方。因为似乎每个人都说这会奏效。即使只是为了确定,我什至没有添加任何东西就创建了一个新项目,只是为了看看当我切换片段时是否会调用“onSaveInstanceState()”。结果是一样的,每次切换片段时都会调用“onDestroy()”
    • 我现在就试试这个,给你反馈!非常感谢!。我也觉得这很奇怪,因为我刚开始使用 Android,到目前为止有点令人沮丧
    • 效果很好!非常感谢!只是我仍然无法弄清楚为什么 onSaveInstanceState() 不能正常工作:(
    猜你喜欢
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2020-09-07
    • 2017-03-20
    • 1970-01-01
    相关资源
    最近更新 更多