android - 使用 FragmentStatePagerAdapter 在 ViewPager 的两侧动态添加 fragment

标签 android android-fragments android-viewpager fragmentstatepageradapter

在我的一个应用程序中,我需要在 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 。

最佳答案

我之前遇到过类似的问题,我的解决方法是:

  1. 首先列表是在适配器本身中声明的,因此在创建该适配器的实例时我可以拥有它自己的列表。
  2. 修改了适配器类中的方法 getItem(int arg0),以便它根据项目位置从列表中返回特定项目。
  3. 创建新 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/

相关文章:

android - 自定义键盘的文本预测功能

android - 在 Android 中发送本地通知

java - 显示异步 httprequest 的进度对话框

java - 从创建 FragmentStatePagerAdapter 的 Activity 中调用 Fragment 中的方法

java - 如何从Viewpager返回值: OnPageSelected?

android - 启动画面线程抛出错误。怎么解决? (包括代码和错误)

Android 的 RelativeLayout 单元测试设置

android - 从另一个 Activity 刷新 RecyclerView 后添加一个值

android - 以新顺序使用 fragment 更新 viewpager

java - 如何更新ViewPager中所选项目的样式?