3

Я пользуюсь PagerSlidingTabStrip библиотекой для ViewPagerhttps://github.com/astuetz/PagerSlidingTabStrip. Я хочу изменить фрагменты во время прокрутки. Я достиг этого с помощью приведенного ниже кода.Android: Изменение фрагментов с помощью ViewPager

MainActivity.java

public class MainActivity extends SherlockFragmentActivity { 

private MyPagerAdapter adapter; 
ViewPager pager; 
private PagerSlidingTabStrip tabs; 

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

    tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); 
    pager = (ViewPager) findViewById(R.id.pager); 
    adapter = new MyPagerAdapter(getSupportFragmentManager()); 

    pager.setAdapter(adapter); 

    final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources() 
      .getDisplayMetrics()); 
    pager.setPageMargin(pageMargin); 

    tabs.setViewPager(pager); 

} 

public class MyPagerAdapter extends FragmentPagerAdapter { 
    private final String[] TITLES = {"First","Second","Third"}; 
    private SherlockFragment[] fragments = new SherlockFragment[] { new FirstFragment(), new SecondFragment(), new ThirdFragment()}; 

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

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

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

    @Override 
    public Fragment getItem(int position) { 
     return fragments[position]; 
    } 

} 
} 

FirstFragment.java

public class FirstFragment extends SherlockFragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    final View v = inflater.inflate(R.layout.fragment_main, container, false); 
    Toast.makeText(getSherlockActivity(), "This is from first", Toast.LENGTH_SHORT).show(); 
    return v; 
} 
} 

SecondFragment.java

public class SecondFragment extends SherlockFragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    final View v = inflater.inflate(R.layout.fragment_main, container, false); 
    Toast.makeText(getSherlockActivity(), "SecondFragment", Toast.LENGTH_SHORT).show(); 
    return v; 
} 
} 

ThirdFragment.java

public class ThirdFragment extends SherlockFragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    final View v = inflater.inflate(R.layout.fragment_main, container, false); 
    Toast.makeText(getSherlockActivity(), "ThirdFragment", Toast.LENGTH_SHORT).show(); 
    return v; 
} 
} 

Я получил три фрагмента и я тестирую их Тосты.

Когда приложение открывается с помощью MainActivity, FirstFragment присоединяется к Activity, но он показывает два тоста: один из первого фрагмента и другой из SecondFragment, а когда я перейду на вторую вкладку, вы увидите тост ThirdFragment.

Итак, я решил, что так будет. Если я прокручиваю слева направо, отображается фрагмент справа на текущий фрагмент, и если я прокручусь справа налево, отобразится фрагмент, оставшийся до текущего фрагмента. Пожалуйста помоги.

Спасибо.

+0

есть ли у вас проблема? У меня такая же проблема. Пожалуйста, помогите мне решить проблему. Мой пост: http://stackoverflow.com/questions/23115283/change-fragment-with-viewpager –

ответ

2

Это из-за фрагментов кеширования. Когда вы посещаете фрагменты, к нему также создаются фрагменты сестры (называются onCreate()).

+0

Итак, есть ли способ остановить его? –

+1

http://stackoverflow.com/questions/10024739/how-to-determine-when-fragment-becomes-visible-in-viewpager –

+0

Это сработало. Спасибо. –

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