我有一个带有多个片段的视图寻呼机,我的视图寻呼机适配器是:
private class MyPagerAdapter extends FragmentStateAdapter {
MyPagerAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
super(fragmentManager, lifecycle);
}
@Override
public Fragment createFragment(int position) {
Fragment fragment = ScreenFragment.newInstance(position);
return fragment;
}
@Override
public int getItemCount() {
return 5;
}
}
在Fragments中,当用户改变方向时,我丢失了所有数据,Fragments再次创建。 我在Fragment的onCreate方法中添加了setRetainInstance(true);
,并将Android:configChanges=“OrientationScreenSizeKeyboardHidden”
设置到manifest中的activity行。 但我的问题还是发生了。
你能帮我吗?
您可以保存数据并在循环后还原它们。
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
{
super.onSaveInstanceState(outState, outPersistentState);
outState.putString("theWord", theWord); // Saving the Variable theWord
outState.putStringArrayList("fiveDefns", fiveDefns); // Saving the ArrayList
fiveDefns
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle
persistentState) {
super.onRestoreInstanceState(savedInstanceState, persistentState);
theWord = savedInstanceState.getString("theWord"); // Restoring theWord
fiveDefns = savedInstanceState.getStringArrayList("fiveDefns"); //Restoring
fiveDefns
}
更改设备的方向被视为配置更改。
配置更改将破坏,然后重新创建您的片段。
解决此问题的建议方法是使用ViewModel。 ViewModel的思想是,它在这些配置更改中幸存下来,并且当您的片段被重新创建时,它将仅仅重新连接到ViewModel。
或者,您可以自己处理配置更改。 谷歌并不推荐这种选择,而是作为最后的手段使用。