Как изменить панель инструментов при переходе от действия к фрагменту

#android #android-fragments #android-activity #kotlin #android-toolbar

#Android #android-фрагменты #android-активность #kotlin #android-панель инструментов

Вопрос:

У меня есть действие, панель инструментов и несколько фрагментов, как я могу изменить панель инструментов, переданную фрагменту из MainActivity

я попытался вызвать панель инструментов из fragment1.xml но он показывает две панели инструментов, одну над другой

Здесь я вызвал фрагмент

         R.id.menu_acercade -> {
                    binding.navegacionInferior.selectedItemId = item.itemId
                    cerrarDrawer()
                    false
                }
        R.id.menu_acercade -> {
                            intercalarIconosMenu(false)
                            intercalarPagers(true)
                            binding.navegacionInferior.menu.getItem(2).isCheckable = true  //binding.navegacionInferior.menu.getItem(2).isCheckable = true
                            binding.viewpagerSecciones.setCurrentItem(0, true) //antes 0
                            true
                        }
  

Вот XML фрагмента, в котором я хочу изменить панель действий, но всякий раз, когда я добавляю тег layou, он добавляет другой пример панели действий

две панели действий

 <?xml version="1.0" encoding="utf-8"?>
<layout 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">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <!--<include layout="@layout/toolbar_atras" />-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="542dp"
            android:orientation="vertical">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="24dp"
                android:src="@drawable/about_logo" />
            <android.support.v7.widget.AppCompatTextView
                style="@style/Titulo.Principal"
                android:layout_marginBottom="24dp"
                android:text="@string/menu_opcion_acercade" />
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="36dp"
                android:layout_marginRight="36dp"
                android:layout_marginBottom="16dp"
                android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
                android:textColor="@color/colorTexto" />
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="36dp"
                android:layout_marginRight="36dp"
                android:text="Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
                android:textColor="@color/colorTexto" />
        </LinearLayout>


        <android.support.design.widget.BottomNavigationView
            android:id="@ id/navegacionInferior"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="0dp"
            android:layout_marginBottom="0dp"
            android:background="@color/colorBlanco"
            android:paddingEnd="0dp"
            android:paddingBottom="0dp"
            app:elevation="16dp"
            app:itemBackground="@drawable/fondo_navegacioninferior"
            app:itemIconTint="@color/colorPrimario"
            app:itemTextColor="@color/colorPrimario"
            tools:menu="@menu/menu_inferior" />
    </LinearLayout>
</layout>
  

Комментарии:

1. Пожалуйста, добавьте XML-файл

2. @CesarJoelGurrola Проверьте мой ответ, я также привел пример того, какой должна быть последовательность компоновки, а также как обновить заголовок внутри фрагмента.

Ответ №1:

Внутри вашего действия

 setSupportActionBar(yourToolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
  

В вашем фрагменте

 (activity as? AppCompatActivity)?.supportActionBar?.title = "Your Title"
  

Ваш макет действия, вероятно, должен следовать последовательности в приведенном ниже примере

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

<!-- AppBarLayout is a wrapper for a Toolbar -->
<!-- Note that AppBarLayout expects to be the first child nested within a CoordinatorLayout -->
<android.support.design.widget.AppBarLayout
    android:id="@ id/appBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar">

    <android.support.v7.widget.Toolbar
        android:id="@ id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways" />
</android.support.design.widget.AppBarLayout>


<!-- FrameLayout can be used to insert fragments to display the content of the screen -->

<FrameLayout
    android:id="@ id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

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

Комментарии:

1. не сработало, я пробовал (действие как? AppCompatActivity)?.setSupportActionBar(findViewById (панель инструментов)), есть комментарии? Приветствует

2. Могу я узнать , почему вы снова настраиваете панель инструментов в своем фрагменте? Установите панель инструментов только внутри вашего MainActivity, который добавляет / заменяет фрагмент. Пусть фрагмент просто обновит заголовок , вместо настройки панели инструментов, это предотвратит отображение двух панелей инструментов одна над другой

3. это потому, что мне нужно изменить его на (backToolbar) вместо меню, мне нужно: — в основном действии -> MenuToolbar — во фрагменте 1 -> BackToolbar есть идеи, как я могу этого добиться?