Intereting Posts

DrawerLayout и многоуровневая компоновка

Мое приложение использует макет многоуровневой панели для отображения списка назначений. Каждое Assignment может быть помещено в одну категорию AssignmentCategory . Я хочу использовать DrawerLayout для отображения всех AssignmentCategories, чтобы пользователь мог легко переключаться между различными категориями.

Мне не удалось создать такой макет. В официальном руководстве DrawerLayout DrawerLayoutActivity заменяет Fragment когда пользователь нажимает на элемент (в моем случае AssignmentCategory ). Проблема, с которой я сталкиваюсь, заключается в том, что для макета Multi Pane требуется FragmentActivity . Я не знаю, как создать Fragment который содержит макет Multi Pane. Кто-то сумел это сделать?

Solutions Collecting From Web of "DrawerLayout и многоуровневая компоновка"

Сочетание двух проектов не должно быть слишком сложным. В примере кода пример DrawerLayout заменяет фрагмент содержимого, но вам не нужно делать то же самое, вы можете просто обновить тот же фрагмент, чтобы показать правильные данные. Вы могли бы реализовать два проекта таким образом:

  • Начните с демонстрационного проекта с несколькими панелями.
  • Обновите два действия многостраничной демонстрации, чтобы расширить ActionBarActivity (v7), вам не нужно расширять FragmentActivity
  • Реализовать DrawerLayout (код примера из проекта ящика) в активности начального списка (я предполагаю, что вы не хотите, чтобы DrawerLayout в активности деталей, но его реализация не должна быть проблемой, если вы этого хотите).
  • Макет активности стартового списка будет таким (не забывайте, что вам нужно также реализовать изменения DrawerLayout в DrawerLayout activity_item_twopane.xml !):

     <DrawerLayout> <fragment android:id="@+id/item_list" .../> <ListView /> <!-- the list in the DrawerLayout--> </DrawerLayout> 
  • Измените реализацию DrawerItemClickListener поэтому, когда пользователь нажимает элемент списка ящиков, который вы не создаете, и не добавляйте новый фрагмент списка, вместо этого вы обновляете один фрагмент списка из макета:

     AssignmentListFragment alf = (AssignmentListFragment) getSupportFragmentManager() .findFragmentById(R.id.item_list); if (alf != null && alf.isInLayout() && alf.getCurrentDisplayedCategory() != position) { alf.updateDataForCategory(position); // the update method setTitle(DummyContent.CATEGORIES[alf.getCurrentDisplayedCategory()]); } 
  • Метод обновления будет примерно таким:

     /** * This method update the fragment's adapter to show the data for the new * category * * @param category * the index in the DummyContent.CATEGORIES array pointing to the * new category */ public void updateDataForCategory(int category) { mCurCategory = category; String categoryName = DummyContent.CATEGORIES[category]; List<DummyContent.Assigment> data = new ArrayList<Assigment>( DummyContent.ITEM_MAP.get(categoryName)); mAdapter.clear(); // clear the old dsata and add the new one! for (Assigment item : data) { mAdapter.add(item); } } public int getCurrentDisplayedCategory() { return mCurCategory; } 

    – различные другие небольшие изменения

Я сделал образец проекта, чтобы проиллюстрировать приведенные выше изменения, которые вы можете найти здесь .