My hierarchy is like this.A viewpager included 3 pages(all fragment),called
NewFragment
,InvoledFragment
and MeFragment
,and outside the viewpager i set a Radiobutton to switch between Newfragment
and another fragment named Hotfragment
,for some reason i used hide(),show()
to manage the switch,here is![enter image description here is my code
RadioButton check listener
private class CheckedChangeListener implements RadioGroup.OnCheckedChangeListener {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.button_new:
mFragmentAtPos0 = newfrag;
fragTransaction = fragmentManager.beginTransaction();
if(!newfrag.isAdded()){
fragTransaction.hide(hotfrag).add(R.id.mainviewpager,newfrag).commit();
}
else{
fragTransaction.hide(hotfrag).show(newfrag).commit();
}
mFragmentAtPos0 = newfrag;
Toast.makeText(MainActivity.this, "NEW", Toast.LENGTH_SHORT).show();
break;
case R.id.button_hot:
fragTransaction = fragmentManager.beginTransaction();
if(!hotfrag.isAdded()){
fragTransaction.hide(newfrag).add(R.id.mainviewpager,hotfrag).commit();
}
else{
fragTransaction.hide(newfrag).show(hotfrag).commit();
}
mFragmentAtPos0 = hotfrag;
Toast.makeText(MainActivity.this, "HOT", Toast.LENGTH_SHORT).show();
break;
}
}
}
and the FragmentPagerAdapter
private class MyPagerAdapter extends FragmentPagerAdapter {
private final FragmentManager mFragmentManager;
public MyPagerAdapter(android.support.v4.app.FragmentManager fm) {
super(fm);
mFragmentManager = fm;
}
@Override
public Fragment getItem(int position) {
if(position == 0){
Log.d("check","111");
return mFragmentAtPos0;
}
else if(position == 1){
return(new InvolveFragment());
}
else {
return(new MeFragment());
}
}
@Override
public int getCount() {
return 3;
}
@Override
public int getItemPosition(Object object)
{
if (object instanceof NewFragment && mFragmentAtPos0 == hotfrag)
return POSITION_NONE;
return POSITION_UNCHANGED;
}
}
My problem is the HotFrag
didn't show,but it worked (I put log code in hotfrag to check),and viewpager just works fine,I stucked here for several hours but still got no way to solve it.
There is a answer i found quite similar,it's here Replace Fragment inside a ViewPager, but i worked with hide,show, not replace.
Anyone could help?Thanks a lot!