0

Что касается потери состояния или вращения экрана, и когда мой логический флаг является истинным, я хочу воссоздать свой экран. Тем не менее, менеджер фрагментов по-прежнему имеет прикрепленный предыдущий фрагмент и загружается.FragmentManager содержит фрагмент из viewpager после потери состояния

Что я могу сделать, чтобы избавиться от этого фрагмента?

public class ViewPagerAdapter extends FragmentPagerAdapter { 

private String[] mData; 

public ViewPagerAdapter(FragmentManager fm) { 
    super(fm); 
    mData= new String[0]; 
} 

@Override 
public Fragment getItem(int position) { 
    Bundle bundle = new Bundle(); 
    bundle.putInt("key", position); 

    Fragment fragment = new MyFragment(); 
    fragment.setArguments(bundle); 

    return fragment; 
} 

@Override 
public int getCount() { 
    return mData.length; 
} 

@Override 
public int getItemPosition(Object object) { 
    return POSITION_NONE; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    return mData[position]; 
} 

public void setData(String[] data) { 
    mData= data; 
} 
} 

Кусок кода активность OnCreate()

mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager()); 
mViewPagerAdapter.setData(data); 
viewPager.setAdapter(mViewPagerAdapter); 
+0

Почему вам нужно явно удалить фрагменты? Вы можете просто подготовить данные и обновить контент. – jobcrazy

+0

Мне нужно удалить старый фрагмент, когда у меня больше нет данных. Я пытаюсь повторно создать экземпляр фрагмента после операции для извлечения обновленных данных. В противном случае это приведет к сбою доступа к нулевому объекту. – awonderer

+0

Просто проверьте фрагмент, чтобы избежать сбоя, когда вы закончите получать обновленные данные, действие будет обрабатывать жизненный цикл фрагментов, вам просто нужно убедиться, что фрагменты получают последние данные, когда они собираются показать (например, в onCreateView()) – jobcrazy

ответ

0

Вы можете переопределить instantiateItem() для определения поворота экрана, как фрагмент может.

Пример кода:

@Override 
public boolean isViewFromObject(View view, Object o) { 
    return o == view; 
} 

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    View view = getActivity().getLayoutInflater().inflate(R.layout.pager_item, 
        container, false); 
    return view; 
} 

Примечание: instantiateItem() происходит при повороте экрана. Активность этого не обнаруживает. Подсказка состоит в том, что класс не имеет onCreateView(), как класс фрагмента.

 Смежные вопросы

  • Нет связанных вопросов^_^