1

Я знаю, что обычно для фрагментов вы можете сделать что-то подобное в OnCreate вашей activitiy, чтобы получить уже созданный фрагмент, который имеет .setRetainInstance (истинный) об изменении ориентации вместо создание нового фрагмента:Как предотвратить фрагмент фрагмента пейджера от воссоздания при изменении ориентации?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState == null) { 
     TestFragment test = new TestFragment(); 
     test.setArguments(getIntent().getExtras()); 
     getSupportFragmentManager().beginTransaction().replace(android.R.id.content, test, "your_fragment_tag").commit(); 
    } else { 
     TestFragment test = (TestFragment) getSupportFragmentManager().findFragmentByTag("your_fragment_tag"); 
    } 
} 

Моих Вопрос в том, как сохранить и извлечь такой фрагмент, который находится внутри viewpager? Воспроизведение фрагмента - это не то, что я хочу. Даже если бы я мог получить эти теги фрагментов, обработчики viewpager прикрепляют фрагмент, поэтому не представляется возможным проверить существующий фрагмент и получить его вместо создания нового. Вот моя деятельность и пейджер:

public class MainActivity extends AppCompatActivity { 

    private ViewPager mViewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(new PagerAdapter(getSupportFragmentManager())); 


    } 

    public class PagerAdapter extends FragmentStatePagerAdapter { 
     public PagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      switch (position){ 
       case 0:      
        return new FragmentA(); 
       case 1: 
        return new SettingsFragment(); 
       default: 
        return null; 
      } 
     } 


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


} 

ответ

0

ViewPager автоматически помечать фрагмент, поэтому найти фрагмент с помощью тега не вариант здесь. Однако вы можете сохранить ссылку на свой фрагмент, созданный пейджером представления, переопределив метод instantiateItem(ViewGroup container, int position) класса FragmentPagerAdapter.