Я разрабатываю свое собственное приложение для Android, и я пришел к тому, что у меня есть три разных действия, например, действие A, действие B и действие C. Теперь я хочу создать навигационный ящик для навигации между ними. Я прочитал учебник на веб-сайте разработчиков Android, но они были сосредоточены только на фрагментах. Как профессиональные приложения для Android разрабатываются только с одним действием, а все остальные экраны разрабатываются с использованием фрагментов? Если нет, то почему не задокументировано, как вместо этого реализовать правильный навигационный ящик с действиями? Спасибо за вашу помощь.
Android Navigation Drawer, реализованный с помощью Activity
comment
Обратите внимание, что в документации говорится, что вы должны использовать навигационный ящик только в том случае, если у вас есть более трех представлений верхнего уровня.
- person Karol Babioch   schedule 05.05.2014
comment
Хорошо, чтобы уточнить, как Google Play Store разработан с точки зрения Navigation Drawer?
- person koufa   schedule 05.05.2014
Ответы (2)
Вам нужно создать Base activity
, который делает все обычные Drawer navigation
вещи. Я буду называть эту базу Activity
как DrawerActivity
, а все остальные Activity
должны расширять эту DrawerActivity
. Таким образом, все Activity
будут иметь один экземпляр Drawer Layout
.
Создайте общий макет с DrawerLayout
и поместите FrameLayout
и ListView
в качестве дочерних.
<android.support.v4.widget.DrawerLayout>
<FrameLayout
android:id="@+id/activity_frame”/>
<ListView
android:id="@+id/left_drawer”/>
</android.support.v4.widget.DrawerLayout>
Теперь установите этот макет в onCreate()
на 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());
}
Добавить прослушиватель щелчка элемента
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);
}
}
Наконец, вся остальная деятельность расширит этот 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
}
}
Вы можете увидеть полный исходный код здесь https://gist.github.com/libinbensin/613dea436302d3015563.
person
Libin
schedule
05.05.2014
Пожалуйста, предоставьте полный пример активности, которая расширяет DrawerActivity. Я раздул свой макет и добавил его как дочерний вид макета фрейма. Но это не работает. Мне просто нужно (// добавить свой собственный макет этого действия в макет фрейма.), как это сделать правильно.
- person ayon; 08.05.2014
Смотрите мой обновленный ответ. Вам нужно
inflate
создать макет Activity
и добавить его в качестве дочернего элемента в FrameLayout
. Дайте мне знать, если вы все еще видите какие-либо проблемы
- person Libin; 09.05.2014
Ааа... Я сделал точно такой же код, но я установил frameLayout в качестве параметра ViewGroup для раздувания макета. Вероятно, это было причиной того, что мое приложение попало в бесконечный цикл. Я попробую, если это сработает, это будет большим подспорьем. Большое спасибо за вашу помощь.
- person ayon; 09.05.2014
Превосходно! Спасибо!
- person CyberGriZzly; 02.12.2014
@Libin, как предотвратить открытие текущей активности дважды?
- person Tejas Pandya; 05.03.2019
Вы можете иметь NavigationDrawer в каждом действии, заполненном одним и тем же списком параметров.
person
Karakuri
schedule
05.05.2014
Я думал об этом, но это обычная практика?
- person koufa; 05.05.2014