从抽屉菜单中切换片段内的标签

时间:2017-03-25 20:28:09

标签: java android android-fragments

我在片段中有一个TabLayout。我正在尝试使用DrawerLayout项目切换标签。不确定如何从父Activity访问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);
  }
}

1 个答案:

答案 0 :(得分:0)

要获取活动中片段的实例,请使用:

consecutiveOnes :: [Int] -> Bool
consecutiveOnes xs = isInfixOf [1,1] xs

完成后,您可以调用您的方法:

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

这回答了这个问题,但是我会考虑使用ViewPager,或者只是坚持点击标签移动到它们而不是查看导航抽屉。