在我的一个应用程序中,我需要在 ViewPager 的两侧添加 fragment 。首先,我将获得 5 个提要的常量,我的 ViewPager 将在索引 2 处显示提要,即我当前显示的 fragment 将包含索引 2 处的数据。所以总体而言,我的 ViewPager 将在开始时显示 5 个提要的中心,我通过像这样将 ViewPager 当前 Item 设置为 2 来实现
viewPager.setCurrentItem(2);
现在用户可以向两侧滑动,当他从中心位置向左滑动时,我将寻找下一个提要,即从服务器获取并在我的 ViewPager 的零索引处添加提要,就像这样
feedsList.add(0, modelClassObject); // feedsList will contain all feeds and has been used by adapter to show data in fragments.
adapter.notifyDataSetChanged();
当我从中心位置向右滑动时,我会像这样在最后添加 feed
feedsList.add(modelClassObject);
adapter.notifyDataSetChanged();
现在的问题是,如果我只在右侧添加提要,即在提要列表的末尾,一切正常,但当我在零索引处添加提要时,问题就来了。我的适配器没有显示已添加到零位置的新提要,而是重复现有提要之一,并且也在右侧而不是左侧。我已经尝试了一切,但没有任何事情是正确的。这是我的适配器代码。
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();
}
}
我也用过这个
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
但没有结果.. :(
所以非常需要,如果有人早些时候这样做并遇到同样的问题,请告诉我我做错了什么。我只需要在我的 ViewPager 的零索引处添加 fragment 。
最佳答案
我之前遇到过类似的问题,我的解决方法是:
- 首先列表是在适配器本身中声明的,因此在创建该适配器的实例时我可以拥有它自己的列表。
- 修改了适配器类中的方法
getItem(int arg0)
,以便它根据项目位置从列表中返回特定项目。 - 创建新 fragment 时,使用实例化方法创建它,然后将其添加到您的 fragment 中。
所以,完整的解决方案是:
适配器类:
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();
}
}
在创建适配器时:
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
以及何时要创建新 fragment :
adapter_obj.feedsList.add(0, Fragment.instantiate(mContext, ViewPager_Container_Class.class.getName(), page));
adapter_obj.notifyDataSetChanged();
关于android - 使用 FragmentStatePagerAdapter 在 ViewPager 的两侧动态添加 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27645144/