具体是这样的,页面上需要显示一个底部切换的tab,在每个tab中需要显示一个顶部切换的tab,样子是这样的:
这里在切换下边的tab时候导致中间的layout内容无法加载。
这里是 我的消息 fragment:
public class MessageFragment extends Fragment {
private FragmentActivity mContext;
private final String[] mTitles = {"交流", "公告","test1","test2","test3", "通知"};
private ViewPager vp;
private SlidingTabLayout tabLayout;
private View view;
private int index = 0;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
mContext = this.getActivity();
super.onCreate(savedInstanceState);
}
@TargetApi(Build.VERSION_CODES.M)
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_main_message, null);
vp = ViewFindUtils.find(view, R.id.frg_mymessage_list);
//问题是这里需要调用getChildFragmentManager,而不是getFragmentManager
vp.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
vp.setCurrentItem(index);
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
index = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
tabLayout = ViewFindUtils.find(view, R.id.frg_mymessage_tabs);
tabLayout.setViewPager(vp);
return view;
}
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
System.out.println("count:"+mTitles.length);
return mTitles.length;
}
@Override
public CharSequence getPageTitle(int position) {
System.out.println("title position:"+position);
return mTitles[position];
}
@Override
public Fragment getItem(int position) {
System.out.println("item position:"+position);
Fragment f = SimpleCardFragment.getInstance(mTitles[position]);
return f;
}
}
}
基础不好啊,fragment中嵌套fragment需要使用getChildFragmentManager,activity中嵌套fragment调用getFragmentManager。这里表现出来的问题是,在activity加载进入之后页面是完整的中间显示的layout能够显示,当切换底部的tab返回 我的消息 时导致中间的layout无法加载。