2015-04-10 1 views
0

Имейте 2-уровневый пользовательский интерфейс. На верхнем уровне есть полоса вкладок, работающая от FragmentPagerAdapter. Один из фрагментов, в свою очередь, имеет 2-й уровень FragmentPagerAdapter и собственную полосу вкладок, несущую пару «суб» фрагментов. Теперь субфрагменты отображаются, когда первый раз перемещаются вкладки верхнего уровня. Но «суб» фрагменты не отображаются на 2-ой итерацииБорьба с верхним уровнем FragmentPagerAdapter, содержащим фрагмент с собственным адаптером FragmentPager

Вот как адаптер subtabpager создается в одном из фрагментов, которые существуют на самом верхнем уровне

общественный конечный класс MainLevelTabFragment расширяет фрагмент {

private SubpageTabsPagerAdapter mSubpagePagerAdapter; 
private ViewPager mSubpageViewPager; 
private SlidingTabLayout mSlidingTabLayout; 


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

    View rootView = null; 
    Bundle bundle = getArguments(); 

     rootView = inflater.inflate(R.layout.fragment_tab_main_level, container, false); 
     mSubpageViewPager = (ViewPager) rootView.findViewById(R.id.subpage_screen_tabs_pager); 
     mSlidingTabLayout = (SlidingTabLayout) rootView.findViewById(R.id.sliding_tabs); 

     mSubpagePagerAdapter = new SubpageTabsPagerAdapter(getSupportFragmentManager, getActivity()); 
     mSubpageViewPager.setAdapter(mSubpagePagerAdapter); 

    return rootView; 
} 

код SubpageTabsPagerAdapter выглядит следующим образом

public class SubpageTabsPagerAdapter extends FragmentPagerAdapter { 

    private Context mContext; 
    private Cursor mCursor; 

    public SubpageTabsPagerAdapter(FragmentManager fm, Context context) { 
     super(fm); 
     mContext = context; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     if (null == mCursor) 
      return null; 

     mCursor.moveToPosition(position); 

     Fragment fragment = new SubtabFragment(); 
     fragment.setArguments(args); 

     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return (null != mCursor) ? mCursor.getCount() : 0; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     if (null == mCursor) 
      return null; 

     mCursor.moveToPosition(position); 

     return "title"; 
    } 

    public void swapCursor(Cursor c) { 
     if (mCursor == c) 
      return; 

     mCursor = c; 
     notifyDataSetChanged(); 
    } 
} 

ответ

0

Я думаю, что вы, возможно, придется использовать getChildFragmentManager() в вместо getSupportFragmentManager() в вашем SubpageTabsPagerAdapter конструкторе.

+0

Да, это все. getChildFragmentManager() решает противоречивое поведение. Спасибо, стэкент! – androidmobileguy

+0

Рад помочь. Пожалуйста, верните услугу, отметив мой ответ как правильный. Спасибо –

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