7

Chciałbym być w stanie utworzyć szufladę nawigacji, która ma kilka rozszerzalnych, możliwych do wybrania elementów oraz niektóre elementy nierozszerzalne. Konsensus dotyczący StackOverflow w przypadku pytań podobnych do moich wskazuje na rozwiązania autorstwa ExpandableListView (co może nawet nie dotyczyć mojego pomysłu). W większości przypadków to, o co prosili ludzie, to sposób na oddzielenie elementów w szufladzie Nav, tak jak aplikacja GMail ma etykiety, a nie to, co próbuję zrobić ...Jak utworzyć menu rozwijane w szufladzie nawigacji (w systemie Android)?

... która jest w zasadzie opisana HERE enter image description here

i SIMILARLY HERE (though all, not some are dropdowns) . I nie jak THIS ANSWER.

Odpowiedz

1

Użyj ExpandableListView w DrawerLayout, tak:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout2" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<FrameLayout 
    android:id="@+id/content_frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:id="@+id/tv_commentary_behind_nav" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal|top" 
     android:text="Frame text" /> 
</FrameLayout> 
<!-- The navigation drawer --> 
    <ExpandableListView 
     android:id="@+id/left_drawer2" 
     android:layout_width="250dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="@color/white" 
     android:choiceMode="multipleChoice" 
     android:dividerHeight="0dp" 
     /> 

</android.support.v4.widget.DrawerLayout> 

Następnie zainicjować w kodzie tak:

private DrawerLayout drawer; 
    private ExpandableListView drawerList; 
    private CheckBox checkBox; 
    private ActionBarDrawerToggle actionBarDrawerToggle; 


@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.drawer_layout); 
     drawer = (DrawerLayout) findViewById(R.id.drawer_layout2); 
     drawerList = (ExpandableListView) findViewById(R.id.left_drawer2); 
     drawerList.setAdapter(new NewAdapter(this, groupItem, childItem)); 
    } 
+1

Co to są "groupItem' i" childItem'. Co to jest NewAdapter i jak radzi sobie z 'groupItem' i' childItem', aby niektóre elementy można było rozszerzyć? Twoja odpowiedź jest niekompletna. –

+0

groupItem jest tablicą zawierającą ciągi znaków dla każdej z opcji grupy. "TopView 2" w powyższej grafice. childItem to macierz/hashmap zawierający listę elementów, które mają zostać usunięte po wybraniu każdego z elementów grupy. NewAdapter przypisuje wartości zbiorów danych groupItem i childItem do widoków, gdy nadmuchuje posiadacza każdego przedmiotu. – AlleyOOP

1

powinny mieć klasę posiadające wszystkie zaimplementowane metody ExpandableListAdapter jak ChildItemsInfo klasa i klasa GroupItemsInfo, z MainActivity mającą detektory kliknięć do grupowania elementów i ich dzieci

... teraz być bardziej szczegółowe ...

można umieścić wewnątrz getGroupView() to, że jest w środku MyExpandableListAdapter klasa

View ind = convertView.findViewById(R.id.group_indicator); 
    View ind2 = convertView.findViewById(R.id.group_indicator2); 
    if (ind != null) 
    { 
     ImageView indicator = (ImageView) ind; 
     if (getChildrenCount(groupPosition) == 0) 
     { 
      indicator.setVisibility(View.INVISIBLE); 
     } 
     else 
     { 
      indicator.setVisibility(View.VISIBLE); 
      int stateSetIndex = (isExpanded ? 1 : 0); 

      /*toggles down button to change upwards when list has expanded*/ 
      if(stateSetIndex == 1){ 
       ind.setVisibility(View.INVISIBLE); 
       ind2.setVisibility(View.VISIBLE); 
       Drawable drawable = indicator.getDrawable(); 
       drawable.setState(GROUP_STATE_SETS[stateSetIndex]); 
      } 
      else if(stateSetIndex == 0){ 
       ind.setVisibility(View.VISIBLE); 
       ind2.setVisibility(View.INVISIBLE); 
       Drawable drawable = indicator.getDrawable(); 
       drawable.setState(GROUP_STATE_SETS[stateSetIndex]); 
      } 
     } 
    } 

... a co do widoku układu, to jest jak mój group_items. XML wydaje się być wystarczająco

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:id="@+id/group_heading" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="20dp" 
    android:paddingTop="16dp" 
    android:paddingBottom="16dp" 
    android:textSize="15sp" 
    android:textStyle="bold"/> 

<ImageView 
    android:id="@+id/group_indicator" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@android:drawable/arrow_down_float" 
    android:layout_alignParentRight="true" 
    android:paddingRight="20dp" 
    android:paddingTop="20dp"/> 

<ImageView 
    android:id="@+id/group_indicator2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@android:drawable/arrow_up_float" 
    android:layout_alignParentRight="true" 
    android:visibility="gone" 
    android:paddingRight="20dp" 
    android:paddingTop="20dp"/> 

jasne ?, skomentować ilekroć