如何将以下Android方法转换为递归方法?

3
我为教育软件创建了800个碎片,所以我不能使用vpPager.setOffscreenPageLimit(800)。 我认为我必须使用循环来通过按钮点击打开FragmentX(LessonX)。 我的方法如下,我尝试了所有这些方法,它们运行缓慢,打开一个fragmentXYZ需要3分钟或4分钟。 我想寻求帮助或尝试递归方法,但我无法将其转换为递归方法。 请有人能提供帮助吗?对不起,我的英语很差。
public void  Mypagermethod_1(int x) {
    final ViewPager vpPager = (ViewPager) findViewById(R.id.pager);
    vpPager.setCurrentItem(0);
    int i;
    for (i = 1; i <= x; i++) {
        vpPager.setCurrentItem(vpPager.getCurrentItem() + 1);
    }
}

或者

public void  Mypagermethod2(int x) {
    final ViewPager vpPager = (ViewPager) findViewById(R.id.pager);
    vpPager.setCurrentItem(0);
    int i=1;
    while(i <= x){
        vpPager.setCurrentItem(vpPager.getCurrentItem() + 1);
        i++;
    }
}

或者

public void  Mypagermethod3(int x) {
    final ViewPager vpPager = (ViewPager) findViewById(R.id.pager);
    vpPager.setCurrentItem(0);
    int i=1;
    do {
        vpPager.setCurrentItem(vpPager.getCurrentItem() + 1);
        i++;
    } while(i <= x);
}

每当我提出一个问题时,我的声望值就会下降,请不要给我负面评价,我只是一名教师和招聘程序员。我正在为我的学生准备教育软件。 - Feramuz Alacal
2个回答

1

我明白你在做什么。在你的方法中,你不必模拟每次滑动一页,只需调用vpPager.setCurrentItem(800)。


为了调用vpPager.setCurrentItem(800),必须在适当的方法中编写vpPager.setOffscreenPageLimit(800)。手机和平板电脑的性能仍然较弱,所有设备都无法管理运行或缓存vpPager.setOffscreenPageLimit(800)命令。 - Feramuz Alacal
我建议您阅读ViewPager的文档。 setOffscreenPageLimit用于设置预加载到ViewPager中的片段数,您不应该尝试将其设置得太高,而应直接调用setCurrentItem。 - m.stevanovic
如果片段布局彼此不同,则vpPager.setCurrentItem(0)和vpPager.setCurrentItem(1)可以运行,但如果x>=2,则vpPager.setCurrentItem(x)无法运行。它会产生空指针异常。 - Feramuz Alacal
你需要自己管理屏幕外的碎片。把你的视图页卡想象成一盘录制电影,该电影可以无限循环,但放映机每次只会显示一帧,并在接下来的两到三帧中提供未来播放或倒带的选择。如果你自己管理一个5个碎片的窗口,就能容纳800个碎片,同时保持良好的性能。 - Machinarius

0
以上所有的代码示例都具有相同的性能,改为递归方法也不会有任何区别。问题显然在于vpPager.setCurrentItem(vpPager.getCurrentItem() + 1);,如果该方法很慢,那么无论如何调用它都会很慢。
您没有提供足够的信息以便得出更具体的答案,您需要进行调试并查看时间花费在哪里。您是否正在渲染图像或其他可以分配到单独线程的任务?

每个片段都有GridView,单元格会在有人触摸时发声,并且单元格中有非常小的图片或句子。使用了许多字体适配器。第一个片段是MainLessons菜单,充满了数百个按钮。(Button1->Lesson1,,Button800->Lesson800)如果我使用Mypagermethod,在按钮点击内打开一个课程需要很长时间。但是左右水平或垂直向上、向下滑动没有问题。但是要用滑动打开Lesson800很困难。人们必须向左滑动800次才能打开Fragment800。非常感谢您的帮助和评分。 - Feramuz Alacal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接