实现Android仿今日头条多个fragment懒加载,需要用到Fragment中的ViewPager结合FragmentPagerAdapter。具体步骤如下:
1. 创建多个Fragment并加载到ViewPager中
首先,我们需要创建多个Fragment,并将它们加载到ViewPager中。可以通过使用FragmentPagerAdapter来实现。在创建FragmentPagerAdapter时需要重写getItem()方法,并返回相应的Fragment。
public class MyPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public MyPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
// 返回tab对应的标题
}
}
2. 实现Fragment的懒加载
接下来,我们需要实现Fragment的懒加载,只有当Fragment被选中时才实例化它,避免一次性实例化所有Fragment,浪费资源。
在Fragment中,我们重写onCreateView()方法,并进行懒加载。我们可以使用loadData()方法来模拟Fragment需要实现的一些操作。
public class MyFragment extends Fragment {
private boolean isPrepared; // Fragment是否加载完成
private boolean isVisible; // Fragment是否可见
public MyFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my, container, false);
// 标记Fragment已经准备完毕
isPrepared = true;
// 如果Fragment可见,开始加载数据
if (isVisible) {
loadData();
}
return view;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
// 如果Fragment可见,开始加载数据
if (isVisibleToUser) {
isVisible = true;
if (isPrepared) {
loadData();
}
} else {
isVisible = false;
}
}
private void loadData() {
// 加载数据
}
}
在上面的代码中,我们重写了setUserVisibleHint()方法,当Fragment可见时调用该方法,开始进行数据加载。如果Fragment还未准备好,这时并不会进行数据加载,而是等到onCreateView()方法完成后,如果Fragment仍然可见,才会进行数据加载。
示例一:“美女”Fragment的懒加载
假设我们创建了一个“美女”Fragment,数据来自于网络,数据请求和加载需要一定的时间,我们不希望加载所有的Fragment,而只加载用户正在查看的Fragment。
假设我们现在需要查看“美女”Fragment,当用户点击“美女”标签时,该Fragment才会被加载,然后开始进行数据请求和加载。过程如下:
- 点击“美女”标签;
- ViewPager会调用FragmentPagerAdapter中的getItem()方法,获取到对应的“美女”Fragment;
- Fragment加载它自己的布局,在onCreateView()方法中标记自己的状态为“准备完毕”;
- Fragment被设置为可见状态,setUserVisibleHint()方法被调用,发现Fragment已经准备完毕,并且可见,所以开始进行数据请求和加载;
- Fragment加载完毕数据后,显示内容。
示例二:“视频”Fragment的懒加载
再假设我们创建了一个“视频”Fragment,数据同样来自于网络,数据请求和加载需要一定的时间。
现在用户在查看“美女”Fragment,点击“视频”标签,这时“视频”Fragment还未被加载。过程如下:
- 点击“视频”标签;
- ViewPager会调用FragmentPagerAdapter中的getItem()方法,获取到对应的“视频”Fragment;
- Fragment被创建并设置为可见,“准备完毕”状态标记为false;
- setUserVisibleHint()方法被调用,可见状态变为true,发现Fragment还未准备完毕,不会进行数据请求和加载;
- 等到Fragment准备完毕后,setUserVisibleHint()方法被调用,发现Fragment已经准备完毕,并且可见,开始请求和加载数据;
- 数据加载完毕后,显示内容。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android仿今日头条多个fragment懒加载的实现 - Python技术站