Метод настройки упрощает реализацию режима домашней страницы Tab + Fragment.

В настоящее время наиболее распространенным стилем домашней страницы приложения является нижняя вкладка + несколько фрагментов. Есть много способов записать его. Обычно вы пишете макет в макете, а затем выполняете обработку щелчков в Activity, переключаете стили, переключаете страницы и записываете события. Подождите минуту. Чтобы упростить эту операцию, был написан небольшой элемент управления для инкапсуляции вейвлета, а для обработки этого режима использовался файл конфигурации.

Как пользоваться

Очень просто, сначала добавьте макет в макет и используйте container_id, чтобы указать макет контейнера фрагмента.

    <FrameLayout
        android:id="@+id/flFragmentContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/layoutBottomTab" />

    <oms.mmc.tempapplication.HomeBottomTabLayout
        android:id="@+id/layoutBottomTab"
        android:layout_width="match_parent"
        android:layout_height="58dp"
        android:layout_alignParentBottom="true"
        android:background="#e9e9e9"
        app:container_id="@id/flFragmentContainer" />

Затем добавьте файл конфигурации в файл ресурсов tab.json

{
  "tabs": [
    {
      "tabName": "黄历",
      "tabTag": "key_almanac_fragment",
      "iconNormal": "main_home_tab_huangli_normal",
      "iconSelected": "main_home_tab_huangli_selected",
      "textColorNormal": "#A4A3A3",
      "textColorSelected": "#C02221"
    },
    {
      "tabName": "工具",
      "tabTag": "key_discover_fragment",
      "iconNormal": "main_home_tab_tool_normal",
      "iconSelected": "main_home_tab_tool_selected",
      "textColorNormal": "#A4A3A3",
      "textColorSelected": "#C02221"
    },
    {
      "tabName": "福利",
      "tabTag": "key_makemoney_money_fragment",
      "iconNormal": "main_home_tab_money_normal",
      "iconSelected": "main_home_tab_money_selected",
      "textColorNormal": "#A4A3A3",
      "textColorSelected": "#C02221"
    }
  ]
}

Таким образом, вы можете инициализировать стиль домашней страницы tab + Fragment внизу. Как настроить Фрагмент?

Посмотрите на приведенное выше, мы добавили поле к каждой вкладке: tagTag. Правильно, на основе этого тега мы переходим к получению фрагмента.

Итак, третий шаг - реализовать интерфейс, определенный в элементе управления в Activity, и реализовать метод получения фрагмента. Здесь мы должны соответствовать один за другим в соответствии с ранее настроенными тегами.

    @Override
    public Fragment getFragmentByTag(@NotNull String tabTag) {
        switch (tabTag) {
            case TAG_HOME_ALMANAC:
                return AlmanacService.getAlmanacFragment();
            case TAG_HOME_CALENDAR:
                return CalendarService.getCalendarFragment();
            case TAG_HOME_TOOLS:
                return DiscoverService.getDiscoverFragment();
            case TAG_HOME_MONEY:
                return MakeMoneyService.getMoneyFragment();
            case TAG_HOME_USER_CENTER:
                return UserService.getUserHomeMainFragment();
            default:
                return null;
        }
    }

Этот шаг в основном в порядке, и весь эффект и режим в порядке. Затем, если вам нужно выполнить некоторые другие специальные операции при переключении вкладок, что вы должны делать? Не волнуйтесь, если интерфейс открыт для внешнего использования, если вы реализуете этот метод onClickChangeTab(), вы можете выполнять некоторые действия, такие как отчеты о событиях и изменение стилей.

Принцип реализации

Принцип очень прост. Фактически, это инкапсуляция. Все, что нужно написать в макете, и некоторые вещи, которые нужно оценить и обработать в действии, помещаются сюда для централизованной обработки, что удобно и грубо в использовании.

Шаг 1. Прочтите конфигурацию

Прочтите файл в утверждениях, прочтите его в потоке и преобразуйте в строку, а затем преобразуйте его в наш файл конфигурации на основе этой строки json.

Шаг 2. Создайте представление

Непосредственно генерируется кодом, изображение + текст, поровну разделенное по весу, устанавливает событие клика

Шаг 3. Нажмите, чтобы переключить вкладку

Здесь есть два шага: один - переключить стиль вкладки, а другой - переключить фрагмент. На что мы должны обратить внимание, так это на переключение фрагмента. Мы используем методы скрытия и отображения. Если добавление происходит впервые, используйте метод добавления. Вы не можете использовать метод замены для переключения, иначе фрагмент будет перестроен, и все жизненные циклы придется перезапускать. Еще раз.

    private fun setFragmentSelected(selectedIndex: Int) {
        val beginTransaction = mFragmentManager?.beginTransaction()
        val tabConfig = mTabs?.get(selectedIndex)
        var fragmentByTag = mFragmentManager?.findFragmentByTag(tabConfig?.tabTag)
        val isFirstInit: Boolean
        if (fragmentByTag == null) {
            fragmentByTag = mCallback?.getFragmentByTag(tabConfig?.tabTag ?: "")
            mFragmentList?.set(selectedIndex, fragmentByTag)
            isFirstInit = true
        } else {
            isFirstInit = false
        }
        mFragmentList?.forEachIndexed { index, fragment ->
            if (fragment != null && fragment.isAdded) {
                beginTransaction?.hide(fragment)
            }
        }
        if (isFirstInit) {
            beginTransaction?.add(mFragmentContainerId, fragmentByTag!!, tabConfig?.tabTag)
        } else {
            beginTransaction?.show(fragmentByTag!!)
        }
        beginTransaction?.commit()
    }

Шаг 4. Предоставьте извне несколько общих методов

Поскольку часто используются такие методы, как получение текущего фрагмента, текущего индекса и т. Д., Эти методы доступны извне. Поскольку список фрагментов, список представлений и текущий индекс поддерживаются, эти методы могут напрямую извлекать соответствующие значения.

Эффект

как сказать? Объем кода в Activity и layout намного меньше, и он относительно прост в использовании.В любом случае, я чувствую, что он очень ароматный.

Поскольку он читает файл конфигурации, чтобы установить макет, требуется время, чтобы взглянуть на него. Как правило, эти операции выполняются в течение 100 мс.
Вставьте описание изображения сюда

рекомендация

отblog.csdn.net/lizebin_bin/article/details/103212586
рекомендация