使用底部导航控制器切换片段,而不会丢失数据

问题描述 投票:2回答:2

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

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

我在网上看到的许多方法或解决方案都使用了不推荐使用的功能(由于我只是一个初学者,所以我不知道现在正在使用什么新功能)

我希望有人可以帮助我!谢谢!

android android-fragments navigation android-fragmentactivity
2个回答
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


-1
投票

如果您不想丢失数据,请使用ViewPager

((https://developer.android.com/training/animation/screen-slide)

也请观看此示例:

https://droidmentor.com/bottomnavigationview-with-viewpager-android/
© www.soinside.com 2019 - 2024. All rights reserved.