У меня есть ViewPager
с PagerTitleStrip
, который заполнен FragmentStatePagerAdapter
который заполнен фрагментами, которые содержат только один текст. Эти тексты хранятся в массиве текстов с 11 позициями, по одному на каждый фрагмент ViewPager.Как обновить только один фрагмент (страница/элемент) ViewPager?
Проблема в том, что некоторые тексты в массиве обновляются каждые X секунд, поэтому я должен найти способ обновления ТОЛЬКО фрагмент, соответствующий этому тексту. Когда я обновляю массив текстов, я знаю положение этого массива, поэтому я знаю номер фрагмента внутри viewpager, который необходимо обновить. но есть проблема, я не знаю, как обновить именно этот фрагмент.
Я только знаю, как обновить все из них в то же самое время, используя notifyDataSetChanged()
и возвращение POSITION_NONE
в getItemPosition
моего FragmentStatePagerAdapter
. Эта стратегия не работает, потому что все они обновляются и одновременно, и это порождает ненормальное поведение (прокрутка теряется на странице, которую вы видите, если вы просматриваете страницы, когда вызывается функция notifyDataSet, вы теряете свое движение , и т. д.)
Так что мне нужна помощь в этом, потому что я полностью потерял, как это решить.
Это мой текущий исходный код:
Это мой адаптер:
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;
}
}
ViewPager, который имеет проблему:
<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>
макет фрагмента:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarSize="5dip"
style="@style/CustomScrollBar">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="left"
android:textSize="16sp"
android:padding="5dp"
style="@style/CustomTextView"/>
</ScrollView>
Большое спасибо.
Пытались ли вы такое событие? – Eenvincible
Не можете ли вы получить экземпляр фрагмента из адаптера? –