Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
停止Android TabLayout自动加载下一页_Android_View_Tabs_Android Viewpager_Android Tablayout - Fatal编程技术网

停止Android TabLayout自动加载下一页

停止Android TabLayout自动加载下一页,android,view,tabs,android-viewpager,android-tablayout,Android,View,Tabs,Android Viewpager,Android Tablayout,我已经意识到,在Android中使用标签布局时,它总是加载与之接触的标签,即之前的标签和之后的标签,因此当你翻页到它时,它会被加载 但是,我从服务器加载了大量的内容和图像,这会导致大量的数据和内存使用,而且我经常会出现OOM错误,我使用Glide高效地显示图像 基本上我需要知道三件事: 如何停止选项卡布局加载当前页面以外的任何页面 如何在进入新页面后清除/回收/删除旧选项卡以清除内存 如何在返回时始终刷新选项卡 默认情况下,它是viewpager.setOffscreenPageLimit(1)

我已经意识到,在Android中使用标签布局时,它总是加载与之接触的标签,即之前的标签和之后的标签,因此当你翻页到它时,它会被加载

但是,我从服务器加载了大量的内容和图像,这会导致大量的数据和内存使用,而且我经常会出现
OOM错误
,我使用Glide高效地显示图像

基本上我需要知道三件事:

  • 如何停止选项卡布局加载当前页面以外的任何页面
  • 如何在进入新页面后清除/回收/删除旧选项卡以清除内存
  • 如何在返回时始终刷新选项卡

  • 默认情况下,它是viewpager.setOffscreenPageLimit(1),这意味着viewpager在默认情况下将至少在当前选项卡的右侧和左侧选项卡上加载1个。之所以这样做,主要是因为在滑动viewpager时,两个选项卡的某个区域都可见。对于这些平稳过渡,需要预加载。无法将其设置为viewpager.setOffscreenPageLimit(0)。 唯一的解决方法是使用此方法setUserVisibleHint 将此添加到您的片段中

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            // load data here
        }else{
           // fragment is no longer visible
        }
    }
    

    只有当特定选项卡对用户可见时,才会调用此函数,因此只有这样,您才能调用所有loadfing函数。希望有帮助。

    默认情况下它是viewpager.setOffscreenPageLimit(1),这意味着viewpager在默认情况下将在当前选项卡的右侧和左侧分别加载至少1个选项卡。之所以这样做,主要是因为在滑动viewpager时,两个选项卡的某个区域都可见。对于这些平稳过渡,需要预加载。无法将其设置为viewpager.setOffscreenPageLimit(0)。 唯一的解决方法是使用此方法setUserVisibleHint 将此添加到您的片段中

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            // load data here
        }else{
           // fragment is no longer visible
        }
    }
    

    只有当特定选项卡对用户可见时,才会调用此函数,因此只有这样,您才能调用所有loadfing函数。希望能有所帮助。

    谢谢,但有时调用setUserVisibleHint太快,而且在所有操作之前先执行操作。谢谢,但有时调用setUserVisibleHint太快,并且在所有操作之前先执行操作