【问题标题】:navigation view with tab layout, go to a tab(fragment) by navigation view item on click带有选项卡布局的导航视图,单击时通过导航视图项转到选项卡(片段)
【发布时间】:2016-04-22 08:18:37
【问题描述】:

我有一个带有 4 个四个选项卡(片段)的 tabLayout,并在 Activity 内附加了 FragmentPagerAdapter 的支持。

我想使用附加的导航视图导航到选项卡。当我单击导航视图中的项目时如何转到选项卡。

那么如何用新的fragment去掉当前的四个tab(附有tablayout)。

附加片段:

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new OfferFragment(), "OFFERS");
    adapter.addFragment(new BookedHistoryFragment(), "Booked History");
    adapter.addFragment(new ReviewFragment(), "Reviews");
    adapter.addFragment(new AvailableRoomFragment(), "Available");
    viewPager.setAdapter(adapter);
}

子类适配器添加片段。

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

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

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

导航视图操作:

mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            mDrawerLayout.closeDrawers();
            if (menuItem.getItemId() == R.id.nav_item_offers) {
                int tabCount= tabLayout.getTabCount();
                // I want to move to other tab.

                Toast.makeText(getApplicationContext(),"First",Toast.LENGTH_SHORT).show();
//                    Intent intent = new Intent(getApplicationContext(), Booking.class);
//                    startActivity(intent);
            }
            else if (menuItem.getItemId() == R.id.nav_item_avail_room) {
                 // Then I want to remove Four tabs and call a new fragment.
                   Toast.makeText(getApplicationContext(),"Second",Toast.LENGTH_SHORT).show();
            }
            return false;
        }

    });

【问题讨论】:

    标签: android-fragments android-tablayout navigationview


    【解决方案1】:

    只需在导航视图中单击项目时告诉标签索引。代码如下。

    对于第二个问题,我开始了新的活动并在其中附加了片段。

    mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            mDrawerLayout.closeDrawers();
            if (menuItem.getItemId() == R.id.nav_item_offers) {
                TabLayout.Tab tab = tabLayout.getTabAt(2);
                tab.select();
            }
            else if (menuItem.getItemId() == R.id.nav_item_avail_room) {
                 // Here I started a new activity and attached fragment.
            }
            return false;
        }
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 2023-01-29
      • 2011-01-04
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多