在Tablayout中我添加了一些标签,当我在标签片段之间切换片段时会刷新其数据?为什么?

时间:2017-09-27 06:48:02

标签: android android-fragments android-viewpager android-tablayout

private Boolean isStarted = false;
private Boolean isVisible = false;

@Override
    public void onStart() {
        super.onStart();
        isStarted = true;
        if (isVisible && isStarted){
            loadData();
        }

}
//
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    isVisible = isVisibleToUser;
    if (isVisible && isStarted) {
        loadData();
    }
}

我想要做的是当我启动应用程序数据来自db并在tab1中显示时,当我点击tab2它再次点击数据库并带来数据和显示。问题出现在我回到tab1然后它再次命中数据库并带来数据并再次在tab1中设置数据但其数据已经加载。

我已经设置了viewPager.setOffscreenPageLimit(1);

需要帮助? 感谢

3 个答案:

答案 0 :(得分:1)

ViewPager 的默认行为,一次只保存两个片段,如果要一直加载所有片段,那么你应该选择 setOffscreenPageLimit(),设置要显示的视图寻呼机项目限制的最大值。之后你的片段没有被刷新。

重写此 setUserVisibleHint()方法删除此方法并在 onViewCreated()方法中调用loadData()数据, 因为 setUserVisibleHint()每次片段在屏幕时都会调用。

viewPager.setOffscreenPageLimit(MAX_FRAGMENT);

答案 1 :(得分:0)

正如@Mohit Suthar所说的ViewPager的默认行为,它一次只保留两个片段,所以你可以改变如下

viewPager.setOffscreenPageLimit(1);

viewPager.setOffscreenPageLimit(FragmentCount);  //apply limit of how many you take fragment to prevent re create View

答案 2 :(得分:0)

最终解决了问题。 只需要设置isStarted = false;isVisible = false;即可。谢谢大家帮助我。

set `isStarted = false;` and `isVisible = false;` inside `loadData();`