如何仅更新ViewPager的一个片段(页面/项目)?

时间:2016-08-12 12:07:02

标签: android android-fragments android-viewpager fragmentpageradapter fragmentstatepageradapter

我有一个ViewPager,其中PagerTitleStrip填充了一个FragmentStatePagerAdapter,其中包含只包含一个文本的片段。这些文本存储在一个包含11个位置的文本数组中,每个ViewPager的一个片段都有一个。

问题是数组中的某些文本每隔X秒就会更新一次,所以我必须找到只更新对应于该文本的片段的方法。当我更新文本数组时,我知道该数组的位置,所以我知道viewpager中必须更新的片段的编号。但是有一个问题,我不知道更新该片段的方法。

我只知道如何使用notifyDataSetChanged()并在POSITION_NONE的{​​{1}}返回getItemPosition,同时更新所有这些内容。这个策略不起作用,因为所有这些都是更新的,同时也会产生异常行为(滚动在你看到的页面中丢失,如果你在调用notifyDataSet函数时在页面之间滑动,你会丢失你的swip运动等等......)

所以我需要帮助,因为我完全迷失了如何解决这个问题。

这是我目前的源代码:

这是我的适配器:

FragmentStatePagerAdapter

ViewPager有问题:

public class CollectionPagerAdapter extends FragmentStatePagerAdapter {
    public CollectionPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        Fragment fragment = new ObjectFragment();
        Bundle args = new Bundle();
        args.putString(ObjectFragment.ARG_TEXT, children[i]);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return infoTitlesArray.length;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return infoTitlesArray[position];
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

片段的布局:

<android.support.v4.view.ViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v4.view.PagerTitleStrip
            android:id="@+id/pager_title_strip"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top"
            android:paddingTop="4dp"
            android:paddingBottom="4dp"
            style="@style/CustomPagerTitleStrip"/>
    </android.support.v4.view.ViewPager>

非常感谢。

1 个答案:

答案 0 :(得分:0)

可以使用标记

找到ViewPager的片段

活动

Fragment fragmentToShow = getSupportFragmentManager().findFragmentByTag(
              mCollectionPagerAdapter.getFragmentTag(R.id.pager, position));

在FragmentStatePagerAdapter中

 public String getFragmentTag(int viewPagerId, int fragmentPosition) {
    // This is the format in which FragmentStatePagerAdapter internally set's  the fragment tag.
    return "android:switcher:" + viewPagerId + ":" + fragmentPosition;
  }