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
Odpowiedz
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
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
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
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
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. –
OK, aby sprecyzować, w jaki sposób Sklep Google Play został opracowany pod kątem szuflady nawigacji? – koufa
Sprawdź http://www.gadgetsaint.com/android/android-navigation-drawer-toolbar/#.WOBABBJ97fY – ASP