8

Pracuję nad własną aplikacją na Androida i doszedłem do punktu, w którym mam trzy różne Aktywności: aktywność A, aktywność B i aktywność C. Chcę teraz utworzyć szufladę nawigacji aby nawigować między nimi. Przeczytałem samouczek na stronie dla programistów Androida, ale skupili się tylko na Fragmentach. W jaki sposób profesjonalne aplikacje dla systemu Android są tworzone tylko z jednym działaniem, a wszystkie inne ekrany są tworzone przy użyciu fragmentów? Jeśli nie, to dlaczego nie udokumentowano, w jaki sposób zaimplementować korygowanie szuflady nawigacji za pomocą działań? Dziękujemy za pomoc.Szuflada nawigacji na Androida zaimplementowana z działaniami

+1

Należy pamiętać, że dokumentacja mówi, że należy użyć tylko szufladę nawigacji w przypadku, gdy mieć więcej niż trzy widoki na najwyższym poziomie. –

+1

OK, aby sprecyzować, w jaki sposób Sklep Google Play został opracowany pod kątem szuflady nawigacji? – koufa

+0

Sprawdź http://www.gadgetsaint.com/android/android-navigation-drawer-toolbar/#.WOBABBJ97fY – ASP

Odpowiedz

16

Należy utworzyć Base activity, który wykonuje wszystkie typowe rzeczy: Drawer navigation. Nazwę tę bazę Activity jako DrawerActivity, a wszystkie inne Activity powinny rozszerzyć ten DrawerActivity. Tak więc wszystkie Activity będą miały jedno wystąpienie Drawer Layout.

utworzyć wspólny układ z DrawerLayout i umieścić FrameLayout i ListView jako dziecko

<android.support.v4.widget.DrawerLayout> 
    <FrameLayout 
    android:id="@+id/activity_frame”/> 
    <ListView 
    android:id="@+id/left_drawer”/> 
</android.support.v4.widget.DrawerLayout> 

teraz ustawić ten układ w onCreate() na DrawerActivity

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_drawer_layout); 
    // do other stuff to initialize drawer layout, add list items 
    ……… 
    ………. 
    // add a listener to the drawer list view 
mLeftDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

}

Dodaj artykuł kliknij słuchacza

private class DrawerItemClickListener implements ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
     switch (position) { 
      case 0: { 
       Intent intent = new Intent(DrawerActivity.this, YourActivity.class); 
       startActivity(intent); 
       break; 
      } 
      default: 
       break; 
     } 
     mDrawerLayout.closeDrawer(mLeftDrawerList); 
    } 
} 

Wreszcie, wszystkie inne aktywności przedłużyć ten DrawerActivity

public class MainActivity extends DrawerActivity { 

    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // don’t set any content view here, since its already set in DrawerActivity 
    FrameLayout frameLayout = (FrameLayout)findViewById(R.id.activity_frame); 
    // inflate the custom activity layout 
    LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View activityView = layoutInflater.inflate(R.layout.activity_main, null,false); 
    // add the custom layout of this activity to frame layout. 
    frameLayout.addView(activityView); 
    // now you can do all your other stuffs 
    } 
} 

Można zobaczyć pełną źródło tutaj https://gist.github.com/libinbensin/613dea436302d3015563

+0

Podaj pełny przykład działania, które rozszerza działanie programu DrawerActivity. Nadmuchałem swój układ i dodałem go jako widok podrzędny układu ramki. Ale to nie działa. Po prostu potrzebuję (// dodaj niestandardowy układ tego działania do układu klatek.), Jak to zrobić poprawnie. – ayon

+0

Zobacz moją zaktualizowaną odpowiedź. Musisz "nadmuchać" swój układ "Activity" i dodać go jako dziecko do 'FrameLayout'. Daj mi znać, jeśli nadal widzisz jakiś problem – Libin

+0

Ahh ... Zrobiłem dokładnie ten sam kod, ale ustawiłem frameLayout jako parametr ViewGroup dla nadmuchania układu. Prawdopodobnie z tego powodu moja aplikacja zdaje się wpadać w nieskończoną pętlę. Spróbuję, jeśli to zadziała, będzie to bardzo pomocne. Dziękuję bardzo za pomoc. – ayon

-5

Możesz mieć NavigationDrawer w każdym działaniu, wypełnione tą samą listą opcji.

+0

Myślałem o tym, ale czy jest to powszechna praktyka? – koufa

+0

Ktokolwiek to zajął, proszę wyjaśnić dlaczego. – Karakuri

Powiązane problemy