android - 突出显示抽屉导航中相对于选项卡布局中的 fragment 的项目

标签 android android-layout android-fragments tabs navigation-drawer

您好,我已经使用 View 分页器实现了选项卡布局。我实现了七个 fragment ,例如 Frag1、Frag 2...Frag 7 对应于 Tab 1、Tab 2...Tab7 。我还实现了抽屉布局。导航也有相应的7项我的要求如下:

当我在选项卡 1 中并将抽屉拉出时,抽屉导航中的第一项必须突出显示。当我在选项卡 5 中时,第 5 项必须突出显示,依此类推。

我尝试这样做,看到了很多教程,但无法完成。

我的activity_main.xml

<android.support.design.widget.CoordinatorLayout
        android:id="@+id/main_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

            <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabGravity="fill"
                app:tabMode="scrollable"
                app:tabTextAppearance="@style/TabTextAppearance"/>
        </android.support.design.widget.AppBarLayout>
        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    </android.support.design.widget.CoordinatorLayout>
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/navheader"
        app:menu="@menu/menu_navigation" />

我的主要 Activity.Java

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Adding Toolbar to Main screen
        mHandler = new Handler();
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // Setting ViewPager for each Tabs
        final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);
        // Set Tabs inside Toolbar
        TabLayout tabs = (TabLayout) findViewById(R.id.tabs);
        tabs.setupWithViewPager(viewPager);
        // Create Navigation drawer and inlfate layout
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
        // Adding menu icon to Toolbar
        ActionBar supportActionBar = getSupportActionBar();
        if (supportActionBar != null) {
            VectorDrawableCompat indicator =
                    VectorDrawableCompat.create(getResources(), R.drawable.ic_menu, getTheme());
            indicator.setTint(ResourcesCompat.getColor(getResources(), R.color.white, getTheme()));
            supportActionBar.setHomeAsUpIndicator(indicator);
            supportActionBar.setDisplayHomeAsUpEnabled(true);
        }
        // Set behavior of Navigation drawer
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    // This method will trigger on item Click of navigation menu

//                    public boolean onNavigationItemSelected(MenuItem menuItem) {
//                        // Set item in checked state
//                        menuItem.setChecked(true);
//
//                        // TODO: handle navigation
//
//                        // Closing drawer on item click
//                        mDrawerLayout.closeDrawers();
//                        return true;
//                    }


                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {

                        //Check to see which item was being clicked and perform appropriate action
                        switch (menuItem.getItemId()) {
                            //Replacing the main content with ContentFragment Which is our Inbox View;
                            case R.id.nav_home:
                                navItemIndex = 0;
                                CURRENT_TAG = TAG_HOME;
                                break;
                            case R.id.nav_history:
                                navItemIndex = 1;
                                CURRENT_TAG = TAG_HISTORY;
                                break;
                            case R.id.nav_location:
                                navItemIndex = 2;
                                CURRENT_TAG = TAG_LOCATION;
                                break;
                            case R.id.nav_developments:
                                navItemIndex = 3;
                                CURRENT_TAG = TAG_DEVELOPMENTS;
                                break;
                            case R.id.nav_donations:
                                navItemIndex = 4;
                                CURRENT_TAG = TAG_DONATIONS;
                                break;
                            case R.id.nav_resources:
                                navItemIndex = 5;
                                CURRENT_TAG = TAG_RESOURCES;
                                break;
                            case R.id.nav_feedback:
                                navItemIndex = 6;
                                CURRENT_TAG = TAG_FEEDBACK;
                                break;
                            case R.id.nav_contactus:
                                navItemIndex = 7;
                                CURRENT_TAG = TAG_CONTACTUS;
                                break;

                            default:
                                navItemIndex = 0;
                        }

                        //Checking if the item is in checked state or not, if not make it in checked state
                        if (menuItem.isChecked()) {
                            menuItem.setChecked(false);
                        } else {
                            menuItem.setChecked(true);
                        }
                        menuItem.setChecked(true);
                        mDrawerLayout.closeDrawers();
                        viewPager.setCurrentItem(navItemIndex);

                        return true;
                    }
                });

请帮助我实现这一目标。

最佳答案

使用Tablayout.addOnTabSelectedListener

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
    @Override
    public void onTabSelected(TabLayout.Tab tab) {
         int position = tab.getPosition();
    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {

    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {

    }
});

从此代码中,您将获得选定的选项卡位置。

现在使用 NavigationView 中的位置值并使用索引检查该项目

navigationView.getMenu().getItem(position).setChecked(true);

关于android - 突出显示抽屉导航中相对于选项卡布局中的 fragment 的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43053270/

相关文章:

android - 不在 RecyclerView 中显示图像

带有选项卡和 Viewpager 的 Android fragment

android - 从后台弹出时不调用 fragment 的 onResume()

java - getClass().getName() 不返回 fragment 中的类名

java - @AutoValue - "cannot find symbol class Generated"错误

java - 在一个类中设置一个值并从另一个类中检索 Java(Android 应用程序)

android - 如何从Gradle中排除内部库

android - 单掷以展开 Android 的 CollapsingToolbarLayout

java - 如何修复 Android 聊天中 ListView 中的此错误

android - 是否可以在 android 中更改提示颜色的一部分?