2013-11-24 10 views
8

Jestem sfrustrowany tym problemem od dłuższego czasu, ale nie mogę sprawić, aby element w szufladzie nawigacji pojawiał się jako wybrany ani programowo, ani gdy użytkownik go wybierze.Jak ustawić konkretny element w szufladzie nawigacji tak, aby był wyświetlany jako wybrany?

staram się osiągnąć następujące http://i.stack.imgur.com/PIHEm.png (nie mogę umieszczać obrazki jeszcze)

Śledzę szufladę przykład nawigacji w http://developer.android.com/training/implementing-navigation/nav-drawer.html i ilekroć przełączyć fragmenty wzywam setItemChecked() na szufladzie nawigacyjnego ListView

mDrawerListView.setItemChecked(position, true);, ale nie wydaje się, aby wybrać pozycję na pozycji w widoku listy.

Mój plik układ jest również niemal dokładnie jak np Google

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    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" /> 

    <ListView 
     android:id="@+id/left_drawer" 
     android:layout_width="160dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#e5e5e5" /> 

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

Każda pomoc jest mile widziana w znacznym stopniu, a dzięki z góry.

EDYCJA: Oto mój kod inicjalizacji dla nav-drawer. Jak widać, nie używam niestandardowego ListView ani Adaptera.

private void setUpDrawer() { 
     mDrawerListViewItems = getResources().getStringArray(R.array.drawer_list_item_names); 
     mDrawerListView = (ListView) findViewById(R.id.left_drawer); 
     mDrawerListView.setAdapter(new ArrayAdapter<String>(this, 
       R.layout.drawer_list_item, mDrawerListViewItems)); 

     mDrawerListView.setOnItemClickListener(new ListView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       selectCounterFragment(position); 
      } 
     }); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerToggle = new ActionBarDrawerToggle(
       this,     /* host Activity */ 
       mDrawerLayout,   /* DrawerLayout object */ 
       R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */ 
       R.string.drawer_open, /* "open drawer" description */ 
       R.string.drawer_close /* "close drawer" description */ 
       ); 

     // Set actionBarDrawerToggle as the DrawerListener 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     // styling option add shadow the right edge of the drawer 
     mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
    } 

Dziękuję wszystkim za odpowiedzi tak daleko.

+0

używacie niestandardowych ListView ?. Możesz użyć seelctor – Raghunandan

+0

Nie, używam wbudowanego ListView z ArrayAdapter. Czy jest szansa, że ​​nie jest wybrane, ponieważ używam Theme.AppCompat.Light? – 0x0

+0

użyj selektora dla 'drawer_list_item.xml' – Raghunandan

Odpowiedz

0

Jaki jest układ elementów listy? Istnieje wiele pułapek z układem elementów listy "połykaniem", co powoduje, że listy nie można wybierać/klikać.

Polecam przyjrzeć się znakomitym artykułom pod numerem Cyril Mottier, szczególnie w sekcji "Dlaczego, do diabła, moje widoki produktów nie są już klikalne?"

Powodzenia,

CJ.

0

Ten

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

wybierze 1st pozycję w menu.

0

użyć android:checked = "true" w pliku yournavigationlist.xml.

procedury opisanej w przykładzie:

<group android:checkableBehavior="single"> 
<item 
     android:id="@+id/nav_main" 
     android:checked="true" 
     android:title="Home" 
     /> 
    <item 
     android:id="@+id/nav_gallery" 
     android:icon="@drawable/ic_menu_gallery" 
     android:title="Gallery" /> 

</group> 

element o identyfikatorze nav_main zostanie wybrana domyślnie podczas uruchamiania aplikacji.

0

Po skonfigurowaniu widoku nawigacji użyj navigationView.setCheckedItem(R.id.default).

0

Dodaj

androida: zaznaczone = "true"

do konkretnej pozycji menu.

Jeśli chcesz otworzyć specyficzny fragment

getSupportFragmentManager().beginTransaction().replace(R.id.frame, new YourFragment()).commit(); 
Powiązane problemy