у меня есть:Динамическое изменение фрагмента содержимого в ViewPager
ViewPager
сFragmentPagerAdapter
на (илиFragmentStatePagerAdapter
, на самом деле не решить мою проблему).- Фиксированное количество фрагментов. Все они имеют один и тот же макет, но имеют
TextView
s, которые необходимо установить по-разному; AsyncTask
, который запрашивает мою базу данных и извлекает содержимое, которое необходимо установить в текстовые элементы.
Так что мой код был:
public class StatsPagerAdapter extends FragmentPagerAdapter {
static final int FRAGMENT_COUNT = 5;
private Parameters[] sectionData;
public StatsPagerAdapter(FragmentManager manager) {
super(manager);
this.sectionData = new Parameters[FRAGMENT_COUNT];
}
@Override
public Fragment getItem(int position) {
return StatsSectionFragment.getInstance(this.sectionData[position]);
}
@Override
public int getCount() {
return FRAGMENT_COUNT;
}
public void setSectionData(int position, Parameters sectionData) {
this.sectionData[position] = sectionData;
notifyDataSetChanged();
}
}
Так я передаю sectionData[position]
к getInstance()
методу моего родового суб-фрагмента. Эти данные должны различать каждый экземпляр фрагментов, загруженных в ViewPager
.
Сначала я буду проездом пустую ссылку, но в моем классе асинхронном:
@Override
protected void onProgressUpdate(Parameters... sectionValues) {
super.onProgressUpdate(sectionValues);
mPagerAdapter.setSectionData(sectionId, sectionValues[0]);
}
Это должно вызвать setSectionData()
выше, обновлять sectionData[position]
и генерировать вызов notifiyDataSetChanged()
. Я надеялся, что это приведет к тому, что адаптер снова загрузит все его элементы, таким образом снова вызовет getItem()
и загрузит новые фрагменты.
К сожалению, это не так. Так прямо сейчас:
если фрагменты (т.е.
getItem()
) созданы до моего результата задачи асинхронном опубликованы, этот пункт будет оставаться пустым (т.е. видимый фрагмент, но с пустыми взглядами текста, так как я никогда не называлgetInstance(non-null stuff)
. Это происходит из-за фрагмент 0 & & фрагмент 1., если фрагменты будут созданы после того, как моя задача асинхронной закончилась (фрагмент 2 до конца, потому что
getItem()
вызываются только тогда, когда вы достигнете этого фрагмента путем считывания), то первое и только звонок вgetItem()
производитgetInstance(non-null stuff)
, и все в порядке.
Как я могу перезагрузить содержание в этих уже есть фрагменты, или заставить адаптер для вызова getItem()
и обновить свои взгляды?
Постараюсь и пусть вы знаете, спасибо. – natario
Работает только с 'FragmentStatePagerAdapter', но это нормально для меня. – natario