我有一个增强的循环,它会动态地膨胀与我的数组中保存的值的数量相关的许多布局。
这很好用,但每次迭代都会调用一个方法,这个方法也有效,但是我需要帮助解决一个大错误。
想象一下,我的数组中有5个项目,因此有5个布局被夸大,在这些布局中,布局上有一个小刮刮卡类型部分。
现在如果用户在第1页,使用刮刮卡,然后转到第2页,使用刮刮卡等,它工作正常。
但是如果用户在第1页上然后转到第5页然后再回到第1页(基本上是随机顺序),则刮刮卡不起作用。
根据我的理解,其原因是该方法被称为在每次迭代时实现,如果用户向后滚动或以随机顺序滚动,则视图将失去其状态。
因此我需要一种方法来保存我的viewpager中创建的视图状态。
这可能适用于我的情况吗?我尽力找到解决方案,但找不到与我的问题相关的东西。
以下是相关代码的片段。感谢您的任何指导或建议!
for (String x : array1) {
//loop out the number of layouts relative to the number of questions held in x
View current_layout = LayoutInflater.from(getActivity()).inflate(R.layout.question_fragment, null);
//use the pageAdapter to add the layout to the users view
pagerAdapter.addView(current_layout);
//call method to add functionality to the scratchcard
isCorrect(current_layout);
}
public void isCorrect(View current_layout) {
ScratchoffController controller1 = new ScratchoffController(getActivity())
.setThresholdPercent(0.40d)
.setTouchRadiusDip(getActivity(), 30)
.setFadeOnClear(true)
.setClearOnThresholdReached(true)
.setCompletionCallback(() -> {
})
.attach(current_layout.findViewById(R.id.scratch_view1), current_layout.findViewById(R.id.scratch_view_behind1));
ScratchoffController controller2 = new ScratchoffController(getActivity())
.setThresholdPercent(0.40d)
.setTouchRadiusDip(getActivity(), 30)
.setFadeOnClear(true)
.setClearOnThresholdReached(true)
.setCompletionCallback(() -> {
})
.attach(current_layout.findViewById(R.id.scratch_view2), current_layout.findViewById(R.id.scratch_view_behind2));
ScratchoffController controller3 = new ScratchoffController(getActivity())
.setThresholdPercent(0.40d)
.setTouchRadiusDip(getActivity(), 30)
.setFadeOnClear(true)
.setClearOnThresholdReached(true)
.setCompletionCallback(() -> {
})
.attach(current_layout.findViewById(R.id.scratch_view3), current_layout.findViewById(R.id.scratch_view_behind3));
ScratchoffController controller4 = new ScratchoffController(getActivity())
.setThresholdPercent(0.40d)
.setTouchRadiusDip(getActivity(), 30)
.setFadeOnClear(true)
.setClearOnThresholdReached(true)
.setCompletionCallback(() -> {
})
.attach(current_layout.findViewById(R.id.scratch_view4), current_layout.findViewById(R.id.scratch_view_behind4));
}
答案 0 :(得分:0)
我通常使用带有片段的ViewPager,当我尝试在viewpager之外保留对Fragment实例(在我的例子中)的引用时,你提到的内容已经发生在我身上。
这是因为当您按照提及的方式重新选择选项卡时,viewpager可能会创建它包含的Fragment的新实例。发生这种情况时,您在viewpager之外保存的实例引用不再是viewpager所显示的内容。
在您的情况下,according to this question,您必须更加instatiateItem
和destroyItem
。我认为您可以使用这些方法来保存状态恢复状态,并且还可以在调用instantiateItem时更新任何外部引用。