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

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

Что я делаю не так?

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    rssFragment = RssFragment()
    supportFragmentManager.beginTransaction().replace(R.id.fragment, fragment, "rssFragmentTag")

}

<?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.user_fragment"
            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>

Ответы [ 3 ]

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

Вы не можете заменить <fragment>, который уже определен в макете XML, на другой фрагмент, он только прикрепит новый фрагмент к макету существующего фрагмента.

Я полагаю, что у вас нет другого выборано чтобы заменить ваш <fragment> другим ViewGroup, скажите:

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

и замените его существующим вызовом:

supportFragmentManager.beginTransaction().replace(R.id.fragment, fragment, "rssFragmentTag")
0 голосов
/ 30 ноября 2018

Метод транзакции фиксации отсутствует.

supportFragmentManager.beginTransaction().replace(R.id.fragment, fragment, "rssFragmentTag").commit()
0 голосов
/ 30 ноября 2018

Нельзя смешивать объявленные в XML Fragment s с FragmentManager вызовами замены / удаления.См. Создание фрагмента , в частности примечание в конце:

Примечание. При добавлении фрагмента в макет операции путем определения фрагмента в XML-файле макета вы не сможетеудалить фрагмент во время выполнения.Если вы планируете обменивать свои фрагменты во время взаимодействия с пользователем, вы должны добавить этот фрагмент в действие при первом запуске действия, как показано в разделе Создание гибкого пользовательского интерфейса.

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