gpt4 book ai didi

java - 当 FragmentStatePagerAdapter 到达项目末尾时加载更多数据

转载 作者:行者123 更新时间:2023-11-30 00:34:03 27 4
gpt4 key购买 nike

Noob android 开发者的问题

问题缺失:

我正在尝试实现无限滚动功能,当 FragmentStatePagerAdapter 到达最后一项时通过网络请求加载更多数据,目前我将 getCount 的静态数字设置为 10//,我想做的是触发网络请求一旦达到第 7 个项目就获得 10 个以上的项目并刷新列表,保持循环并可能最终超过 100 个项目因此我使用 FragmentStatePagerAdapter 的原因,还存储/缓存数据以支持从左向右和从右向左滑动

这是我到目前为止尝试过的方法

  1. 阅读这篇文章 infinite viewpager但是它只适用于有限的 fragment 集可能是一个静态数字,我正在尝试do 更加动态,因为我没有固定的 getCount。
  2. 阅读文章 endless scrolling adapters ,我不想使用recycler view as viewpager 对我正在尝试做的事情来说效果很好
  3. 更多 pageradapter 实现

到目前为止我学到了什么需要覆盖 getcount 以返回最大可能值

  public int getCount() {
@Override
return Integer.MAX_VALUE;
}

*我不确定是否也应该重写 getItemPosition 或在 pageListener 上实现某种类型有许多使用 pagerAdapter/fragmentPageradapter 的在线示例我很困惑哪些与 FragmentStatePagerAdapter 相关,哪些与 FragmentStatePagerAdapter 无关

*
// My Framgent class
public class ScreenSlidePageFragment extends Fragment {

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

ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.activity_screen_slide_page_fragment,container,false);

return rootView;
}

public static ScreenSlidePageFragment newInstance (String url){
ScreenSlidePageFragment newFragment = new ScreenSlidePageFragment();

Bundle args = new Bundle();
args.putString("imagePathUrl", url);
newFragment.setArguments(args);
return newFragment;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState);

ImageView mImageView = (ImageView) getView().findViewById(R.id.imageView);

String imageUrl = getArguments().getString("imagePathUrl");

if (imageUrl==null){
Log.i("ScreenSlidePageFragment","no data passed");
}else {
Glide.with(this).load(imageUrl).into(mImageView);
}

}
}

// My adapter implementation

public class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {

List<Resource> mResources;

String url;

Context mContext;

private int NUM_PAGES = 5;

private int currentPosition = 0;

public ScreenSlidePagerAdapter(FragmentManager fm, List<Resource> res,
Context context) {
super(fm);
mResources = res;
mContext = context;
}



@Override
public Fragment getItem(int position) {

if (mResources != null & mResources.size() > 0){
url = mResources.get(position).getUrl();
Log.i("url",url);


return ScreenSlidePageFragment.newInstance(url);

}else {

Toast.makeText(mContext,"no results returned",Toast.LENGTH_LONG).show();
return null;
}

}

@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}

@Override
public int getCount() {
return NUM_PAGES;
}
}

任何帮助将不胜感激

最佳答案

使用 FragmentStatePagerAdapter (support.v13) 并像这样实现 getItemPosition:

public int getItemPosition(Object object) {
return POSITION_NONE;
}

https://hedgehogjim.wordpress.com/2013/10/03/android-updatable-swipe-navigation-with-fragmentstatepageradapter/

return POSITION_NONE "Causes adapter to reload all Fragments when notifyDataSetChanged is called"

OnPageChangeListener 添加到您的 ViewPager 并在将给定的 position 值与您当前的数据大小进行比较后加载更多数据

@Override
public void onPageSelected(int position) {
//Load previous data set if position == 0
//Load next data set if position == myAdapter.mResources.size() - 1
}

在加载(和排序)新数据集后,调用 myAdapter.notifyDataSetChanged() 然后计算并设置新索引以匹配旧偏移量,这样用户就不会看到任何偏移

myViewPager.setCurrentItem(myNewIndex, false)

注意:只有在加载以前的数据集时才需要排序和新索引计算。

关于java - 当 FragmentStatePagerAdapter 到达项目末尾时加载更多数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43709821/

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