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

时间:2017-04-30 18:24:05

标签: java android

来自Noob android开发者的问题

问题辩解:

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

这是我到目前为止所尝试的内容

  1. 阅读这篇文章endless scrolling adapters但是它只适用于 有限的一组片段可能是静态数字,我正在尝试 do更具动态性,我没有固定的getCount。
  2. 阅读文章{{3}},我不想尝试使用 我正在尝试做的事情,viewpager工作正常的回收者视图
  3. 几乎没有Pageradapter实现
  4. 到目前为止我学到的东西 需要覆盖getcount以返回最大可能值

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

    *我不确定是否也应该覆盖getItemPosition或在pageListener上实现某种类型有很多可以在线使用pagerAdapter / fragmentPageradapter的例子我很困惑哪些与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;
            }
        }
    

    任何帮助都将受到高度赞赏

1 个答案:

答案 0 :(得分:1)

使用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“当调用notifyDataSetChanged时,导致适配器重新加载所有片段”

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)

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