Muk*_*ana 6 android android-fragments android-viewpager fragmentstatepageradapter
在我的一个应用程序中,我需要在ViewPager的两侧添加Fragments.首先,我将获得5个Feed的常量,我的ViewPager将在索引2处显示feed,即我当前显示的Fragment将包含索引2处的数据.因此,总体上我的ViewPager将在开始时显示5个Feed的中心,并且我只需将ViewPager当前Item设置为2即可实现
viewPager.setCurrentItem(2);
Run Code Online (Sandbox Code Playgroud)
现在用户可以滑动两边,当他从中心位置向左滑动时,我会查找下一个Feed,即从服务器获取并在我的ViewPager的零索引处添加Feed,就像这样
feedsList.add(0, modelClassObject); // feedsList will contain all feeds and has been used by adapter to show data in fragments.
adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
当我从中心位置向右滑动时,我会在最后添加Feed,就像这样
feedsList.add(modelClassObject);
adapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
现在的问题是,如果我只在右侧添加Feed,即在feedsList的末尾,一切正常,但是当我在零索引处添加Feed时出现问题.我的适配器没有显示已添加到零位置的新Feed,而是重复现有Feed中的一个,而右侧但不是左侧.我已经尝试了一切,但没有什么是正确的.这是我的适配器代码.
private class HorizontalPagerAdapter extends FragmentStatePagerAdapter {
public HorizontalPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int arg0) {
return FeedUserProfileFragment.newInstance(feedsList.get(arg0),
arg0);
}
@Override
public int getCount() {
return feedsList.size();
}
}
Run Code Online (Sandbox Code Playgroud)
我也用过这个
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
Run Code Online (Sandbox Code Playgroud)
但没有结果...... :(
所以在严重的需要中,如果有人早点这样做并遇到同样的问题,请让我知道我做错了什么.我只需要在我的ViewPager的零索引处添加片段.
我之前遇到过类似的问题,我的解决方案是:
getItem(int arg0),以便它根据该项目的位置从列表中返回特定项目。所以,完整的解决方案是:
适配器类:
private class HorizontalPagerAdapter extends FragmentStatePagerAdapter {
public List<Fragment> feedsList;
public HorizontalPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return feedsList.get(position);
}
@Override
public int getCount() {
return feedsList.size();
}
}
Run Code Online (Sandbox Code Playgroud)
创建适配器时:
public static YourPageAdapter adapter_obj; // make sure it's static object
adapter_obj = new YourPageAdapter(getSupportFragmentManager());
adapter_obj.feedsList = new ArrayList<Fragment>();
// then add the list of fixed fragments to it(the 5 in the beginning)
adapter_obj.feedsList = fragments_list; // an ArrayList contains the 5 fragments
Run Code Online (Sandbox Code Playgroud)
当想要创建一个新片段时:
adapter_obj.feedsList.add(0, Fragment.instantiate(mContext, ViewPager_Container_Class.class.getName(), page));
adapter_obj.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4610 次 |
| 最近记录: |