ViewPager не загружает элементы после удаления и повторно добавлена в Framelayout

StackOverflow https://stackoverflow.com//questions/12683123

Вопрос

Я пытаюсь сделать фрагмент для отображения советов для пользователя. Метод 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, все хорошо работает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top