在导航抽屉中实现跨多个组的多选

Dus*_*har 2 java android navigation-drawer androiddesignsupport

我想在我的Navigation Drawer. 此图显示了最初进行的选择(默认情况下不是用户)。

在此处输入图片说明

我已经通过以下代码实现了这一点

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="Category">
    <menu>
        <group android:checkableBehavior="single">
            <item
                android:id="@+id/coaching"
                android:icon="@drawable/coaching"
                android:title="Coaching"
                android:checked="true"/>
            <item
                android:id="@+id/training"
                android:icon="@drawable/training"
                android:title="Training"/>
        </group>
    </menu>
</item>

<group android:checkableBehavior="single">
    <item
        android:id="@+id/new_registrations"
        android:icon="@drawable/new_registrations"
        android:title="New Registrations"
        android:checked="true"/>
    <item
        android:id="@+id/ready_certificates"
        android:icon="@drawable/ready_certificates"
        android:title="Certificates Ready To Collect"/>
    <item
        android:id="@+id/allotted_certificates"
        android:icon="@drawable/allotted_certificates"
        android:title="Certificates Allotted So Far"/>
</group>
Run Code Online (Sandbox Code Playgroud)

但问题是当我手动选择任何项目时,所有先前从两个组中选择的项目都会被取消选择。所以我想验证第一组中的一项选择和第二组中的一项选择。寻找缺失的属性。

use*_*678 5

  • android:checkableBehavior="single"从两个组中删除。
  • android:checked="true"从“教练”和“新注册”项目中删除。
  • android:checkable="true"为每个项目单独设置。
  • 为两个组 ("@+id/first_group""@+id/second_group")设置唯一 ID 。

您的activity_main_drawer.xml应如下所示:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:title="Category">
        <menu>
            <group android:id="@+id/first_group" >
                <item
                    android:id="@+id/coaching"
                    android:icon="@drawable/coaching"
                    android:title="Coaching"
                    android:checkable="true" />
                <item
                    android:id="@+id/training"
                    android:icon="@drawable/training"
                    android:title="Training"
                    android:checkable="true" />
            </group>
        </menu>
    </item>
    <group android:id="@+id/second_group" >
        <item
            android:id="@+id/new_registrations"
            android:icon="@drawable/new_registrations"
            android:title="New Registrations"
            android:checkable="true" />
        <item
            android:id="@+id/ready_certificates"
            android:icon="@drawable/ready_certificates"
            android:title="Certificates Ready To Collect"
            android:checkable="true" />
        <item
            android:id="@+id/allotted_certificates"
            android:icon="@drawable/allotted_certificates"
            android:title="Certificates Allotted So Far"
            android:checkable="true" />
    </group>
</menu>
Run Code Online (Sandbox Code Playgroud)
  • MenuItemMainActivity.java 中声明两个对象并检查它们。
  • 将以下逻辑添加到onNavigationItemSelected.

您的MainActivity.java应如下所示:

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    MenuItem prevItemOfFirstGroup;
    MenuItem prevItemOfSecondGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // ... some code

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        prevItemOfFirstGroup=navigationView.getMenu().findItem(R.id.coaching);
        prevItemOfFirstGroup.setChecked(true);
        prevItemOfSecondGroup=navigationView.getMenu().findItem(R.id.new_registrations);
        prevItemOfSecondGroup.setChecked(true);
    }

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        int groupId = item.getGroupId();
        if (groupId == R.id.first_group) {
            if (prevItemOfFirstGroup != null) {
                prevItemOfFirstGroup.setChecked(false);
            }
            prevItemOfFirstGroup = item;
        } else if (groupId == R.id.second_group) {
            if (prevItemOfSecondGroup != null) {
                prevItemOfSecondGroup.setChecked(false);
            }
            prevItemOfSecondGroup = item;
        }
        item.setChecked(true);

        // Handle navigation view item clicks here.
        int id = item.getItemId();
        // ... some code

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return false; // IMPORTANT! NOT TRUE!
    }
}
Run Code Online (Sandbox Code Playgroud)