FragmentPagerAdapter не раздувает фрагменты при добавлении во второй раз (в пользовательском представлении)

#java #android #android-viewpager

#java #Android #android-viewpager

Вопрос:

У меня есть пользовательский вид, расширяющий RelativeLayout, в котором у меня есть viewpager, очень похожий на эту карточку.

Проблема: когда я впервые добавляю представление в макет, все хорошо, но когда я оставляю текущий фрагмент и возвращаюсь к нему, в FragmentPagerAdapter нет никаких фрагментов. Вызываются все методы, но фрагменты не раздуваются

Пользовательский вид и адаптер:

 SectionsPagerAdapter adapter = new SectionsPagerAdapter(((MainActivity)context).getSupportFragmentManager());
viewPager.setAdapter(adapter);
viewPager.setOffscreenPageLimit(5);
tabLayout.setupWithViewPager(viewPager);
 

 public class SectionsPagerAdapter extends FragmentPagerAdapter {

    SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                return Fragment_HourlyPage.newInstance();
            case 1:
                return Fragment_HourlyPage.newInstance();
            case 2:
                return Fragment_HourlyPage.newInstance();
            case 3:
                return Fragment_HourlyPage.newInstance();
            case 4:
                return Fragment_HourlyPage.newInstance();
        }
        return null;
    }

    @Override
    public int getCount() {
        return 5;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "10AM - 11AM";
            case 1:
                return "11AM - 12AM";
            case 2:
                return "12AM - 1PM";
            case 3:
                return "1PM - 2PM";
            case 4:
                return "2PM - 3PM";
        }
        return null;
    }
}
 

Добавление пользовательского представления в макет:

 //inside AsyncTask
CardActivityMonitoring card = new CardActivityMonitoring(getActivity());
container.addView(card);
 

Изменение фрагментов экрана:

 public void openDashboard() {
    Fragment_Tabs main = new Fragment_Tabs();
    fm.beginTransaction()
            .replace(R.id.mainContainer, main)
            .addToBackStack(null)
            .commit();
}

//I'm switching between these

public void openSettings() {
    Fragment_Settings frag = new Fragment_Settings();
    fm.beginTransaction()
            .replace(R.id.mainContainer, frag)
            .addToBackStack(null)
            .commit();
}
 

Замена FragmentPagerAdapter на FragmentStatePageAdapter устранила бы эту проблему, но по какой-то причине загрузка представления заняла бы 2 секунды.

Я попытался использовать фрагмент вместо пользовательского представления, но та же проблема.

Комментарии:

1. Попробуйте удалить return null из вашего getItem

2. Это не сработало

3. Что такое контейнер в container.addView (card)?

4. Это линейное описание