Как изменить во время выполнения фрагмент, определенный в макете на <fragment> - PullRequest
0 голосов
/ 30 ноября 2018

Я создаю действие (MainActivity.kt) с помощью «android.support.design.widget.BottomNavigationView», которое имеет несколько вкладок.Когда пользователь касается вкладки, то «BottomNavigationView.OnNavigationItemSelectedListener» должен представить соответствующий фрагмент.

Вопрос:

Как установить во время выполнения в методе onCreateView другой фрагмент, чемопределяется в файле макета атрибутом «android: name».

MainActivity.kt

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    }

Layout / ActivityMain.xml


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        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:id="@+id/main_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">


    <fragment
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:name="com.developer.myapplication.Locator"
            android:id="@+id/fragment"
            />

    <android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="?android:attr/windowBackground"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:menu="@menu/navigation"
            app:layout_constraintTop_toBottomOf="@+id/fragment"
            app:layout_constraintStart_toStartOf="parent"/>

</android.support.constraint.ConstraintLayout>

1 Ответ

0 голосов
/ 30 ноября 2018

Если вы хотите изменить фрагмент во время выполнения, вы должны использовать FrameLayout в качестве контейнера для вашего фрагмента вместо использования тега фрагмента.Как только вы используете FrameLayout, очень легко поменять местами фрагменты во время выполнения;Вы можете просто использовать getFragmentManager (). beginTransaction (). replace (R.id.FrameLayoutId, new MyFragment ()). commit ().Кроме того, вы обычно используете тег фрагмента для фрагментов, которые должны остаться (то есть вы не планируете их заменять или изменять во время выполнения).Для получения дополнительной информации вы можете взглянуть на то, как представление основной детали реализовано с фрагментами ( Android: когда / почему я должен использовать FrameLayout вместо Fragment? )

Надеюсь, это поможет!:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...