ViewPager не загружает элементы после удаления и повторно добавлена в Framelayout
Вопрос
Я пытаюсь сделать фрагмент для отображения советов для пользователя. Метод Createview Fragment возвращает ViewPager и настроить PagerAdapter через Asynctask. Этот фрагмент добавляют динамически в фрагментаксию, когда пользователь нажимает кнопку. Если пользователь достигает последнего элемента нажмите одну и ту же кнопку снова, этот фрагмент удаляется из фрагментаксирования. Важно отметить, что добавляю фрагмент к IDEnfied Framelayout idenfied by android.r.id.content.
Хорошо, первый раз, когда я нажимаю кнопку, она работает как ожидалось. Но второй раз я нажимаю кнопку, ViewPager не появляется. Когда я использую иерархию просмотра, чтобы увидеть, что случилось, я вижу ViewPager в нужном месте, но без предметов. Я отлажил и отметил, что называется GetCount () PagerAdapter, но GetItem никогда не вызывается.
Это метод создания моего фрагмента:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View tipsView = inflater.inflate(R.layout.tip_manager_layout, container, false);
this.tipPagerAdapter = new TipPagerAdapter(getFragmentManager(), getArguments().getIntArray(TIP_LAYOUT_IDS_KEY));
this.viewPager = (ViewPager) tipsView.findViewById(R.id.tip_pager);
this.viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if(position == (tipPagerAdapter.getCount()-1)){
stop();
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
// Workaround to set the PagerAdapter within a fragment transaction
new SetViewPagerAdapterTask().execute();
return tipsView;
}
.
Я добавляю фрагмент таким образом:
FragmentTransaction fragmentTransaction = fragmentActivity.getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(android.R.id.content, this, TAG);
fragmentTransaction.commit();
.
и удалить фрагмент таким образом:
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.remove(tipManagerFragment);
fragmentTransaction.commit();
.
Это макет, накачанный фрагментом:
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tip_pager"
android:layout_width="fill_parent"
android:layout_height="175dp"
android:layout_gravity="center_horizontal|bottom"
android:paddingBottom="2dp" />
.
Может кто-нибудь помочь мне с этой проблемой?
Редактировать:
На некоторое время я использую шоу и скрывающую способы фрагмента после добавления его к активности. Но это не правильный подход. Я не могу понять, почему я не могу снова добавить фрагмент со ViewPager. ViewPager добавляется и удаляется правильно, но во второй раз он просто ничего не показывает.
Решение
После долгого времени думать о моей проблеме, у меня была следующая идея: может быть, проблема связана с тем, что я удаляю фрагмент, который имеет ViewPager, но я не удаляю фрагменты, используемые ViewPagerОтказЗатем эти фрагменты продолжаются в Fragmentmanager, и что-то странное происходит, когда новый ViewPager пытается использовать их.
Итак, я начал пытаться удалить все фрагменты.Для этого я создал метод в моем фрагментеPagerAdapter таким образом:
public void destroy(FragmentTransaction fragmentTransaction){
for(Fragment tipFragment : tipFragments){
fragmentTransaction.remove(tipFragment);
}
}
.
Адаптер использует уклончивости для создания его содержимого.Итак, я получаю фрагменттрацию в качестве параметра, и я удаляю все эти фрагменты.Когда я хочу удалить свой фрагмент, я использую этот код:
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
tipPagerAdapter.destroy(fragmentTransaction);
fragmentTransaction.remove(TipManagerFragment.this);
fragmentTransaction.commit();
.
Таким образом, я удаляю все фрагменты, и когда добавляю фрагмент, который снова имеет ViewPager, все хорошо работает.