我有一个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>
非常感谢。
答案 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;
}