我还是Android(和编码)的新手,这是我第一次使用Swipe视图,即ViewPagers和适配器。我的活动有3个片段。当我从片段A移动到片段B时,一切都很好。但是当我移动到片段C时,onStop
被调用片段A.当我返回片段A时,我的所有视图都被恢复,除了少数。 EditText
次查看没问题,但其他观点也有问题......
我的印象是onSaveInstanceState
保存了观看次数。我是否必须手动保存这些状态?由于这些是Fragments
,是否应通过arguments
完成?
这是我的片段onCreateView
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(
R.layout.activity_grade_calculator, container, false);
Bundle args = getArguments();
if(args.containsKey(PERSISTENT_FIRSTLOAD_BUNDLE_KEY)) {
firstLoad = args.getBoolean(PERSISTENT_FIRSTLOAD_BUNDLE_KEY);
}
context = this.getActivity();
if(firstLoad) {
bindAll();
setInitialViews();
setListeners();
}
firstLoad = false;
return rootView;
}
以下是MyPagerAdapter
@Override
public Fragment getItem(int i) {
//System.out.println("We are trying to get item " + i);
switch(i) {
case 0:
Fragment fragment = new FinalCalcFragment();
return fragment;
case 1:
Fragment fragment1 = new NewGradeCalcFragment();
return fragment1;
case 2:
Fragment fragment3 = new NewGradeCalcFragment();
return fragment3;
default:
return null;
}
}
以下是一些表现不佳的TextView
。
<TextView
android:id="@+id/tv_grade_calc_forgrade"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/radioGroup1"
android:layout_marginTop="4dp"
android:text="@string/tv_grade_calc_forgrade" />
<TextView
android:id="@+id/tv_grade_calc_ifscore"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/radioGroup1"
android:layout_marginTop="4dp"
android:text="@string/tv_grade_calc_ifscore" />
<TextView
android:id="@+id/tv_grade_calc_result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@id/tv_grade_calc_ifscore"
android:layout_marginRight="10dp"
android:layout_marginTop="-7dp"
android:textSize="28sp" />
编辑:顺便说一句,我和FragmentPagerAdapter
和FragmentStatePagerAdapter
都玩过。我不完全明白他们做的不同,但似乎都没有给我我想要的东西。
答案 0 :(得分:2)
如果Fragments
中只有这三个ViewPager
,您可以使用{{1}方法定义始终保留在内存中的最小Fragments
个mViewPager.setOffscreenPageLimit(value);
1}}
默认值为1.这就是当您滑动到片段C时片段A状态丢失的原因。如果将此值增加到2,则不会发生这种情况,因为ViewPager
将始终保持状态当前显示Fragments
的两个Fragment
(提前或之前)。
答案 1 :(得分:1)
viewpager只提前保留一页。当你到达片段C时,片段A被释放。
片段生命周期与活动生命周期类似,片段可以在不再使用时停止。你应该为此做好准备。
与活动类似,您需要在onSaveInstanceState()
中手动保存状态并稍后恢复状态。