Пытается динамически добавлять фрагменты на разные страницы в Android ViewPager.Вставить новый фрагмент в уже запущенном Android ViewPager
Динамическое добавление фрагмента в конец списка фрагментов прекрасно работает, но попытка добавить к следующему слоту (невидимая страница после текущей просматриваемой страницы). Я попытался добавить в arraylist фрагменты и использовать notifyDataSetChanged и попытаться использовать set на каждом из фрагментов после того, как установить каждый из предыдущего элемента.
Edit: обновленный код
class MainPagerAdapter extends FragmentPagerAdapter {
public MainPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public PageFragment getItem(int position) {
return PageFragment.newInstance(Datamart.getInstance().getURLs().get(position));
}
@Override
public int getCount() {
return Datamart.getInstance().getURLs().size();
}
@Override
public int getItemPosition(Object object) {
PageFragment pageFragment = (PageFragment) object;
for (int i = 0; i < getCount(); i++) {
if (pageFragment.getURL().equals(Datamart.getInstance().getURLs().get(i))) {
return i;
}
}
return POSITION_NONE;
}
}
В DataMart:
public class Datamart {
static Datamart instance;
private ArrayList<String> URLs;
private MainPagerAdapter mainPagerAdapter;
private ViewPager viewPager;
public Datamart() {
URLs = new ArrayList<>();
}
public static Datamart getInstance() {
if (instance == null) {
instance = new Datamart();
}
return instance;
}
public MainPagerAdapter getMainPagerAdapter() {
return mainPagerAdapter;
}
public void setMainPagerAdapter(MainPagerAdapter mainPagerAdapter) {
this.mainPagerAdapter = mainPagerAdapter;
}
public ViewPager getViewPager() {
return viewPager;
}
public void setViewPager(ViewPager viewPager) {
this.viewPager = viewPager;
}
public void addToEnd(String URL) {
URLs.add(URL);
mainPagerAdapter.notifyDataSetChanged();
}
public void addNext(String URL) {
URLs.add(viewPager.getCurrentItem() + 1, URL);
mainPagerAdapter.notifyDataSetChanged();
}
public ArrayList<String> getURLs() {
return URLs;
}
public void setURLs(ArrayList<String> URLs) {
this.URLs = URLs;
}
}
Я подозреваю, что в вашем методе add() есть ошибка. Можете ли вы показать код для этого? – lemuel
Мне кажется, проблема в mainPagerAdapter, предполагая подкласс PagerAdapter. Глядя на логарифм, я подозреваю, что проблема заключается в instantiateItem(). Возможно, опубликуйте некоторые/большинство кода в этом классе. –
Добавлен код, который поможет лучше объяснить. – ogoldbart3