2016-10-29 3 views
0

Я хочу иметь такой выбор в своем Navigation Drawer. На этом рисунке показан выбор, который сделан изначально (по умолчанию не пользователем).Реализация множественного выбора по нескольким группам в навигационном ящике

enter image description here

Я реализовал это следующим кодом

<?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> 

Но дело в том, когда я выбрать любой элемент вручную, то все ранее выбранные элементы из обеих групп получают отменить. Поэтому я хочу проверить один выбор из группы один и один выбор из второй группы. Поиск отсутствующих атрибутов.

ответ

1
  • Удалить android:checkableBehavior="single" из обеих групп.
  • Удалить android:checked="true" из пунктов "коучинг" и "новое_регистрации".
  • Комплект android:checkable="true" для каждого товара индивидуально.
  • Установите уникальные идентификаторы для обеих групп ("@+id/first_group" и "@+id/second_group").

Вашего 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> 
  • Объявите два MenuItem объектов в MainActivity.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! 
    } 
} 
+0

Ваш формат ответ хорош. Сохраняйте благодарность за кодирование! –

Смежные вопросы