使用底部导航控制器切换片段而不丢失数据
Switch fragment using bottom navigation controller without losing data
我刚开始用 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();
我刚开始用 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();