gpt4 book ai didi

android - ViewPager Items 的延迟加载数据

转载 作者:行者123 更新时间:2023-11-29 15:26:22 24 4
gpt4 key购买 nike

我有一个包含 ViewPagerFragment ,现在 ViewPager 包含 3 个不同的项目,即每个项目(页面)包含一个 ListView 和每个列表都有自己的 Adapter ,我不能使用 FragmentPagerAdapter

因为 ViewPager 存在于 Fragment 中。

我应该在 Fragment 中加载所有三个 ListViews 数据并将其传递给 PagerAdapter 吗?

最佳答案

   public  abstract class BaseLazyFragment extends Fragment {

protected boolean isVisible;


/**
* to judge if is visible to user
* @param isVisibleToUser
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);

if(getUserVisibleHint()) {
this.isVisible = true;
onVisible();
} else {
this.isVisible = false;
onInvisible();
}

}


/**
* when the fragment is not visible to user
*/
protected void onInvisible() {
Loggy.e("do onInvisible");
}

/**
* when the fragment is visible to user
*
* lazyload
*/
protected void onVisible() {
Loggy.e("do onVisible---");
lazyLoad();
}

protected abstract void lazyLoad();

}

然后您可以创建一个客户 fragment 扩展 BaseLazyFragment例如

   public class NewsFragment extends BaseLazyFragment {

private boolean isPrepared;
//a flag to judge init action has finished

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_news_page,null);

//do init

// when init is finish , set flag true;
isPrepared = true;

lazyLoad();

return view;
}

@Override
protected void lazyLoad() {

// according this judge, can prevent nullpointerexception
if(!isPrepared || !isVisible){
return;
}

// assignment the view
// get data from network assignment to varible
}
}

setUserVisibleHint()

fragment第一次创建时setUserVisibleHint()方法是header而不是onCreateView(),所以lazyLoad()方法可能会抛出NullPointerException,因为oncreateView()没有被调用,所以你应该创建一个标志变量-->已准备好。

onCreateView()

reference link

关于android - ViewPager Items 的延迟加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com