0

Я внедрил NavigationDrawer, в котором есть статические типы элементов. И я добавил ViewPager и Tabs в одном из многочисленных фрагментов. До сих пор все работает нормально. Но теперь я хочу открыть специальные вкладки и ViewPagers onClick пунктов этого NavigationDrawer. Я пытаюсь установить текущий элемент и вкладку из класса адаптера NavigationDrawer, но не получить правильный результат.Открытие специальной вкладки, которая находится внутри фрагмента из NavigationDrawer в Android

TabsAdapter.java

public static class TabsAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener { 
    private final Context mContext; 
    private final TabHost mTabHost; 
    private final ViewPager mViewPager; 
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 

    static final class TabInfo { 
     private final String tag; 
     private final Class<?> clss; 
     private final Bundle args; 

     TabInfo(String _tag, Class<?> _class, Bundle _args) { 
      tag = _tag; 
      clss = _class; 
      args = _args; 
     } 
    } 

    static class DummyTabFactory implements TabHost.TabContentFactory { 
     private final Context mContext; 

     public DummyTabFactory(Context context) { 
      mContext = context; 
     } 

     public View createTabContent(String tag) { 
      View v = new View(mContext); 
      v.setMinimumWidth(0); 
      v.setMinimumHeight(0); 
      return v; 
     } 
    } 

    public TabsAdapter(FragmentActivity activity, TabHost tabHost, ViewPager pager) { 
     super(activity.getSupportFragmentManager()); 
     mContext = activity; 
     mTabHost = tabHost; 
     mViewPager = pager; 
     mTabHost.setOnTabChangedListener(this); 
     mViewPager.setAdapter(this); 
     mViewPager.setOnPageChangeListener(this); 
    } 

    public void addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args) { 
     tabSpec.setContent(new DummyTabFactory(mContext)); 
     String tag = tabSpec.getTag(); 

     TabInfo info = new TabInfo(tag, clss, args); 
     mTabs.add(info); 
     mTabHost.addTab(tabSpec); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() { 
     return mTabs.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     TabInfo info = mTabs.get(position); 
     return Fragment.instantiate(mContext, info.clss.getName(), info.args); 

    } 

    public void onTabChanged(String tabId) { 
     int position = mTabHost.getCurrentTab(); 
     mViewPager.setCurrentItem(position); 
    } 

    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
    } 

    public void onPageSelected(int position) { 
     // Unfortunately when TabHost changes the current tab, it kindly 
     // also takes care of putting focus on it when not in touch mode. 
     // The jerk. 
     // This hack tries to prevent this from pulling focus out of our 
     // ViewPager. 
     TabWidget widget = mTabHost.getTabWidget(); 
     int oldFocusability = widget.getDescendantFocusability(); 
     widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); 
     mTabHost.setCurrentTab(position); 
     widget.setDescendantFocusability(oldFocusability); 
    } 

    public void onPageScrollStateChanged(int state) { 
    } 

} 

Может кто-нибудь, пожалуйста, помогите мне в этом?

ответ

1

Вы внедряете вложенные фрагменты.

Вы можете заменить activity.getSupportFragmentManager() на activity.getChildSupportFragmentManager().

+0

Когда я заменяю 'getSupportFragmentManager'' getChildSupportFragmentManager', он говорит, что 'getChildSupportFragmentManager' не может быть разрешен. –

+0

Ваш фрагмент должен быть расширен из библиотеки поддержки. Убедитесь, что вы импортируете фрагмент поддержки. –

+0

Также вам нужно использовать AppCompatActivity или FragmentActivity –