我刚刚开始使用Android进行开发。我现在面临的第一个挑战是如何使用BottomNavigationController(由Android Studio自动生成)在片段之间进行更改时如何保存片段数据。
我尝试使用ViewModel,但是由于每次切换时都会调用onDestroy(),因此数据也会丢失。都不切换片段时,不会调用onSaveInstanceState()。
我在网上看到的许多方法或解决方案都使用了不推荐使用的功能(由于我只是一个初学者,所以我不知道现在正在使用什么新功能)
我希望有人可以帮助我!谢谢!
当片段被更改时,它不会被销毁,而是被添加到了堆栈中。所有实例变量都保留在那里。您可以在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();
如果您不想丢失数据,请使用ViewPager
((https://developer.android.com/training/animation/screen-slide)
也请观看此示例:
https://droidmentor.com/bottomnavigationview-with-viewpager-android/