来自Noob android开发者的问题
问题辩解:
当FragmentStatePagerAdapter到达最后一项时,我正在尝试实现通过网络请求加载更多数据的无限滚动实现功能,目前我将getCount的静态数设置为10 //,我想要做的是触发一旦网络请求到达第7个项目以获得10个项目并刷新列表,保持循环进行并可能最终得到超过100个项目因此为什么我使用FragmentStatePagerAdapter,也存储/缓存数据以便支持从左到右&从右到左刷卡
这是我到目前为止所尝试的内容
到目前为止我学到的东西 需要覆盖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;
}
}
任何帮助都将受到高度赞赏
答案 0 :(得分:1)
使用FragmentStatePagerAdapter
(support.v13)并实施getItemPosition
,如下所示:
public int getItemPosition(Object object) {
return POSITION_NONE;
}
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)
注意:只有在加载以前的数据集时才需要排序和新的索引计算。