如何在android中从导航抽屉中手动选择(突出显示)项目?

如何在android中从导航抽屉中手动选择(突出显示)项目?,android,android-fragments,navigation-drawer,Android,Android Fragments,Navigation Drawer,导航抽屉代码如下所示: private void ShowNavigationDrawer() { // DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); // Populate the Navigtion Drawer with options mDrawerList = (ListView) findViewById(R.id.left_drawer)

导航抽屉代码如下所示:

private void ShowNavigationDrawer() {

    // DrawerLayout
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    // Populate the Navigtion Drawer with options
    mDrawerList = (ListView) findViewById(R.id.left_drawer);
    DrawerListAdapter adapter = new DrawerListAdapter(this, mNavItems);
    mDrawerList.setAdapter(adapter);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer_white, R.string.drawer_open,
            R.string.drawer_close);

    // Drawer Item click listeners
    mDrawerList
            .setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    selectItemFromDrawer(position);
                }
            });
}
要在一个活动中选择要加载的正确片段,请执行以下操作:

/** Swaps fragments in the main content view */
private void selectItem(int position) {

    switch (position) {
    case 1:
        currentFragment = new ABCFragment();
        break;
    case 2:
        currentFragment = new SearchTabFragment();
        break;

    default:
        currentFragment = new HomeFragment();
        break;
    }

    currentFragment.setArguments(getIntent().getExtras());
    fragmentManager = getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager
            .beginTransaction();
    fragmentTransaction.replace(R.id.main_content_frame, currentFragment);

    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();

    // Highlight the selected item, update the title, and close the drawer
    mDrawerList.setItemChecked(position, true);
}
要在另一个片段中以编程方式从导航抽屉中选择(突出显示)特定项,我调用以下方法,但它不起作用

// Highlight the selected item
homeActivity.mDrawerList.setItemChecked(position, true);

问题在哪里?有人能帮我解决这个问题吗?

您可以尝试使用新的NavigationView而不是ListView实现导航抽屉。大概是这样的:

 <android.support.design.widget.NavigationView
    android:id="@+id/nv_navigation"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:itemIconTint="@color/navigation_item_selector"
    app:itemTextColor="@color/navigation_item_selector"
    app:itemBackground="@android:drawable/screen_background_light_transparent"
    android:layout_gravity="start" />
 mNavigationView.setCheckedItem(R.id.my_item_1);
可绘制选择器将以正确的方式处理突出显示的工作。例如,这是我的选择器(navigation\u item\u selector.xml):



PS我知道这不是您想要的解决方案,但这是您可能会发现有帮助的解决方案。

您可以尝试使用新的NavigationView而不是ListView来实现导航抽屉。大概是这样的:

 <android.support.design.widget.NavigationView
    android:id="@+id/nv_navigation"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:itemIconTint="@color/navigation_item_selector"
    app:itemTextColor="@color/navigation_item_selector"
    app:itemBackground="@android:drawable/screen_background_light_transparent"
    android:layout_gravity="start" />
 mNavigationView.setCheckedItem(R.id.my_item_1);
可绘制选择器将以正确的方式处理突出显示的工作。例如,这是我的选择器(navigation\u item\u selector.xml):



PS我知道这不是你想要的解决方案,但这是你可能会觉得有用的解决方案。

因为高亮显示意味着给它一个你想要的背景色。如果您不希望在项目的单击事件中使用它,但希望在其他情况下使用它,则必须在导航抽屉适配器上手动使用它。像这样

 public void onBindViewHolder(MyViewHolder holder, int position) {
        NavDrawerItem current = data.get(position);
        holder.title.setText(current.getTitle());
        if(position==0)
        {
           holder.llnavdrawer.setBackgroundResource(R.color.black);
        }
        else if(position==2)
        {
            holder.llnavdrawer.setBackgroundResource(R.color.grey);
        }
        else if(position==4)
        {
            holder.llnavdrawer.setBackgroundResource(R.color.green);
        }
        else if(position==6)
        {
            holder.llnavdrawer.setBackgroundResource(R.color.black);
        }

    }
你可以问你想要的不是这个。
祝你好运

因为高亮显示意味着给它一个你想要的背景色。如果您不希望在项目的单击事件中使用它,但希望在其他情况下使用它,则必须在导航抽屉适配器上手动使用它。像这样

 public void onBindViewHolder(MyViewHolder holder, int position) {
        NavDrawerItem current = data.get(position);
        holder.title.setText(current.getTitle());
        if(position==0)
        {
           holder.llnavdrawer.setBackgroundResource(R.color.black);
        }
        else if(position==2)
        {
            holder.llnavdrawer.setBackgroundResource(R.color.grey);
        }
        else if(position==4)
        {
            holder.llnavdrawer.setBackgroundResource(R.color.green);
        }
        else if(position==6)
        {
            holder.llnavdrawer.setBackgroundResource(R.color.black);
        }

    }
你可以问你想要的不是这个。
祝你好运

手动是指以编程方式突出显示是?是,以编程方式。手动是指以编程方式突出显示是?是,以编程方式。请记住,您的
菜单项
必须声明为
可检查
,才能工作,否则
mNavigationView.setCheckedItem
将被忽略。请记住,您的
MenuItem
必须声明为
checked
才能工作,否则
mNavigationView.setCheckedItem
将被忽略。