【问题标题】:How to prevent loading all fragments data at once using TabLayout如何防止使用 TabLayout 一次加载所有片段数据
【发布时间】:2020-11-30 20:19:33
【问题描述】:

我已经在我的应用程序中实现了 android.support.design.widget.TabLayout。该选项卡包含来自 API 的动态数据以及片段中的动态内容。 我正在调用 Tab wise API。但在我的片段中,所有 API 都调用了第一个片段。因此,显示数据需要太多负载。 我想明智地调用 API 特定的选项卡。当用户点击选项卡时,应该调用 API。

我已将 ArrayList 大小设置为 offscreenPageLimit,如下所示

viewpager.offscreenPageLimit = mTaskStatusListResult.size

经过研究发现https://stackoverflow.com/a/39455160/9635628 并设置viewpager.offscreenPageLimit = 1 但是,第二个选项卡的数据仍在加载。即当用户进入屏幕时,它会在单击第二个选项卡时加载第一个和第二个数据,加载第三个数据。 我想阻止这种情况。你能帮忙吗?将不胜感激。

【问题讨论】:

  • 我前段时间遇到了同样的问题,我找不到方法,只加载当前片段的方法应该是offscreenPageLimit = 0 但是当我测试它时,我发现 offscreenPageLimit 内部表现为即使您将其设置为 0,它也是 1。
  • 我认为您应该将offscreenPageLimit 设置为零,但您也会得到相同的效果。阅读this question

标签: android kotlin android-tablayout dynamic-list


【解决方案1】:

您可以做的一件事是在 Fragment's setUserVisibleHint 覆盖方法内

private boolean isViewShown = false;

    @Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
         super.setUserVisibleHint(isVisibleToUser);      
    if (getView() != null && isVisibleToUser) { 
         isViewShown = true; 
         callAPI(); 
    } else { 
         isViewShown = false; 
    } 
}

仅当片段可见时调用此方法,您可以在此处调用所需的 API 来加载数据。

【讨论】:

  • setUserVisibleHint 已弃用
  • setUserVisibleHint 已弃用我使用了覆盖函数setMenuVisibility 并且它有效。
【解决方案2】:

Viewpager 具有同时初始化两个页面的默认属性,因此您无法更改它,但您可以根据需要设置OffscreenPageLimit

ViewPager.setOffscreenPageLimit(1)

如果它不起作用,您可以尝试另一种方式在 Fragment 可见方法中调用 API

公共类 MyFragment 扩展 Fragment

{

@Override

public void setMenuVisibility(最终布尔可见)

{

super.setMenuVisibility(可见);

    if (visible) {
        // ...
    }

}

// ... }

【讨论】:

  • 你可以尝试使用片段可见的方法
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
  • 2015-12-05
相关资源
最近更新 更多