Android Navigation Drawer, реализованный с помощью Activity

Я разрабатываю свое собственное приложение для Android, и я пришел к тому, что у меня есть три разных действия, например, действие A, действие B и действие C. Теперь я хочу создать навигационный ящик для навигации между ними. Я прочитал учебник на веб-сайте разработчиков Android, но они были сосредоточены только на фрагментах. Как профессиональные приложения для Android разрабатываются только с одним действием, а все остальные экраны разрабатываются с использованием фрагментов? Если нет, то почему не задокументировано, как вместо этого реализовать правильный навигационный ящик с действиями? Спасибо за вашу помощь.


person koufa    schedule 05.05.2014    source источник
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
comment
Пожалуйста, предоставьте полный пример активности, которая расширяет DrawerActivity. Я раздул свой макет и добавил его как дочерний вид макета фрейма. Но это не работает. Мне просто нужно (// добавить свой собственный макет этого действия в макет фрейма.), как это сделать правильно. - person ayon; 08.05.2014
comment
Смотрите мой обновленный ответ. Вам нужно inflate создать макет Activity и добавить его в качестве дочернего элемента в FrameLayout. Дайте мне знать, если вы все еще видите какие-либо проблемы - person Libin; 09.05.2014
comment
Ааа... Я сделал точно такой же код, но я установил frameLayout в качестве параметра ViewGroup для раздувания макета. Вероятно, это было причиной того, что мое приложение попало в бесконечный цикл. Я попробую, если это сработает, это будет большим подспорьем. Большое спасибо за вашу помощь. - person ayon; 09.05.2014
comment
Превосходно! Спасибо! - person CyberGriZzly; 02.12.2014
comment
@Libin, как предотвратить открытие текущей активности дважды? - person Tejas Pandya; 05.03.2019

Вы можете иметь NavigationDrawer в каждом действии, заполненном одним и тем же списком параметров.

person Karakuri    schedule 05.05.2014
comment
Я думал об этом, но это обычная практика? - person koufa; 05.05.2014