1

Когда приложение запускается, он показывает первый фрагмент и готовит второй, когда я вставляю его во второй, он готовит третий ... Когда я откидываюсь назад со второго на третий, все отлично, но когда слайд 1 -> 2 -> 3 -> 2 -> 1, первое содержимое было сброшено ... Что может быть проблемой здесь?FragmentStatePagerAdapter сбрасывает содержимое первого фрагмента

import android.support.v4.app.FragmentStatePagerAdapter; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.view.ViewPager; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class MainActivity extends AppCompatActivity{ 

    private SectionsPagerAdapter mSectionsPagerAdapter; 
    private ViewPager mViewPager; 

    FoldersFragment foldersFragment = new FoldersFragment(); 
    NowPlayingFragment nowPlayingFragment = new NowPlayingFragment(); 
    EqFragment eqFragment = new EqFragment(); 

    public ViewPager getMViewPager() { 
     return mViewPager; 
    } 

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

     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

     mViewPager = (ViewPager) findViewById(R.id.container); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     foldersFragment.setNowPlayingFragment(nowPlayingFragment); 
     nowPlayingFragment.setFoldersFragment(foldersFragment); 
     eqFragment.setMediaPlayer(nowPlayingFragment.mp); 
    } 

    public static class PlaceholderFragment extends Fragment { 

     public PlaceholderFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
      return rootView; 
     } 
    } 

    public class SectionsPagerAdapter extends FragmentStatePagerAdapter { 

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

     @Override 
     public Fragment getItem(int position) { 

      switch (position) { 
       case 0: 
        System.out.println("0"); 
        return foldersFragment; 
       case 1: 
        System.out.println("1"); 
        return nowPlayingFragment; 
       case 2: 
        System.out.println("2"); 
        return eqFragment; 
      } 

      return null; 
     } 

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

ответ

2

по умолчанию закадрового предела 1, так что каждый раз, когда вы переходите к следующему фрагменту он будет проверять, если есть фрагмент, который уже был закадровым и будет возобновлен, когда вы вернетесь к нему:

если вы в настоящее время на странице 3

1 -> |offset| 2 -> (3) -> 4 -> |offset| 5

так page 1 and page 5 будет перезапущен, если он до или после текущей страницы + смещение.

Для увеличения смещения можно назвать:

mViewPager.setOffscreenPageLimit(4)

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