Блок навигации для Android с фрагментом вкладки - PullRequest
1 голос
/ 22 марта 2019

Я новичок в Android и собираюсь разработать такой сложный для меня макет. Вот код файла main_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <android.support.v4.view.ViewPager
            android:id="@+id/home_view_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.AppBarOverlay">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

            <android.support.design.widget.TabLayout
                android:id="@+id/tab_layout_home"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </android.support.design.widget.AppBarLayout>

    </android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:layout_gravity="start"
        app:headerLayout="@layout/nav_header"
        app:menu="@menu/menu_drawer"/>

</android.support.v4.widget.DrawerLayout>

В основном в моей основной деятельности есть блок навигации и 3 вкладки. Вот картинка:

enter image description here

Все работает, как я хочу, и я счастлив.


Когда я нажимаю на элемент ящика навигации, я начинаю новое намерение открыть новое действие, и это хорошо, но ящик, конечно, исчезает (потому что новое действие НЕ имеет ящика). Я хочу держать ящик на экране всегда.

Чтобы держать ящик на моем экране, я подумал, что мог бы поместить TabLayout вышеупомянутого XML как фрагмент; таким образом ящик все еще будет там. Но как я могу это сделать? Как я могу поместить TabLayout во фрагмент, чтобы я мог заменить этот фрагмент на TabLayout или другие фрагменты?

Я думаю, что я мог бы поставить FrameLayout вместо TabLayout, но я не знаю, хорошая ли это идея и как она будет работать. Любая помощь?

Есть похожие вопросы, такие как this , но они не помогли мне, потому что я все еще застрял здесь


Подробнее. Если щелкнуть результаты, будет запущено действие ThisSeason, в котором есть несколько фрагментов (включая ResultsFragments). Это работает, но навигации больше нет, и я должен нажать кнопку "Назад"!

1 Ответ

1 голос
/ 22 марта 2019

Я дам вам общую идею для реализации этого.

  1. Создайте базовое действие для вашего приложения.
  2. Затем создайте фрагмент для каждого действия, включая экран с вкладками,Таким образом, если у вас есть 5 элементов в виде навигации, то будет создано всего 6 фрагментов.
  3. Добавьте представление навигации и связанные с ними функции в основной файл действий xml и java.Это в основном добавит навигационное представление к основному действию, и, поскольку вы используете фрагменты, все страницы (фрагменты) будут иметь навигационное представление.

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

Кроме того, все функции, которые являются общими для всех фрагментов, должны добавляться только в базовое упражнение, а не повторять один и тот же код везде.

...