簡體   English   中英

從抽屜菜單中切換片段中的選項卡

[英]Switch tabs inside a Fragment from Drawer Menu

我在一個片段中有一個TabLayout。 我正在嘗試使用DrawerLayout項目切換選項卡。 不確定如何從父活動訪問TabLayout。 到處檢查,無濟於事。

MainActivity.java

public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Initialize Toolbar and set it as the Action Bar
    mToolbar = (Toolbar) findViewById(R.id.mToolbar);
    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);

    // Inflate the TabFragment as the first one
    mFragmentManager = getSupportFragmentManager();
    mFragmentTransaction = mFragmentManager.beginTransaction();
    mFragmentTransaction.replace(R.id.containerView, new TabFragment()).commit();

    // Initialize Drawer Menu
    mDrawerLayout = (DrawerLayout) findViewById(R.id.mDrawerLayout);
    mNavigationView = (NavigationView) findViewById(R.id.mNavigationView);
    headerLayout = mNavigationView.getHeaderView(0);

    // Set click events for the Drawer Menu items
    mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            // Close the Drawer Menu when an item is clicked
            mDrawerLayout.closeDrawers();

            switch (menuItem.getItemId()) {
                case R.id.menuLessons:
                    return true;
                case R.id.menuCheatSheet:
                    return true;
                case R.id.menuMyProfile:
                    startActivity(new Intent(MainActivity.this, MyProfileActivity.class));
                    overridePendingTransition(R.anim.zoom_in, R.anim.fade_out);
                    return true;
                default:
                    return true;
            }
        }
    });
  }
}

TabFragment.java

public class TabFragment extends Fragment {
  public TabLayout mTabLayout;
  public ViewPager mViewPager;
  public static int int_items = 2;

  @Nullable
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the Tab Layout and setup View Pager
    View x = inflater.inflate(R.layout.layout_tabs, null);
    mTabLayout = (TabLayout) x.findViewById(R.id.mTabLayout);
    mViewPager = (ViewPager) x.findViewById(R.id.mViewPager);

    // Setup Adapter for the View Pager
    mViewPager.setAdapter(new MyAdapter(getChildFragmentManager()));

    return x;
  }

  private class MyAdapter extends FragmentPagerAdapter {
    MyAdapter(FragmentManager fm) {
      super(fm);
    }

    // Return Fragment with respect to position
    @Override
    public Fragment getItem(int position) {
      switch(position) {
        case 0 : return new LessonsFragment();
        case 1 : return new CheatSheetFragment();
      }
      return null;
    }

    @Override
    public int getCount() {
      return int_items;
    }

    // Return title of the tab according to the position
    @Override
    public CharSequence getPageTitle(int position) {
      switch(position) {
        case 0 :
          return "Lessons";
        case 1 :
          return "Cheat Sheet";
      }
      return null;
    }
  }

  public void setCurrentTab(int tab_index) {
    FragmentTabHost mTabHost = (FragmentTabHost)getActivity().findViewById(android.R.id.tabhost);
    mTabHost.setCurrentTab(tab_index);
  }
}

要將實例獲取為活動中的片段,請使用:

Fragment tabFragment = (TabFragment) getSupportFragmentManager().findFragmentById(R.id.containerView);

一旦有了這個,就可以調用方法了:

tabFragment.setCurrentTab(/*tab index*/);

回答了這個問題,但是我會考慮使用ViewPager或只是堅持點擊選項卡將其移至它們,而不是查看導航抽屜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM