Я новичок в создании фрагментов, и у меня нет проблем с этим. Во втором действии (в макете) у меня есть виджет
<fragment
...
android:name = "path to my first fragment"
...
/>
Мне нужно обменять три фрагмента. Я делаю это таким образом
// get fragment manager and fragment transaction
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
// replace fragment on register form
transaction.replace(R.id.fragment, new Confirmation());
// commit transaction
transaction.commit();
и мой макет фрагментов заключен в макет с двумя ограничениями, подобный этому
<android.support.constraint.ConstraintLayout 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">
// additional widgets
<android.support.constraint.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
</android.support.constraint.ConstraintLayout>
Я нашел это решение в стеке, потому что у меня были видимые остатки предыдущего фрагмента. Теперь у меня есть невидимые остатки предыдущего фрагмента. Где у меня ошибка? Когда я нажимаю на позицию кнопки из предыдущего фрагмента, нажимается кнопка в этом месте
Кроме того, я не уверен, чем помог удвоенный макет, но, вероятно, вам больше не нужно этого делать.
@Mike M. спасибо за помощь, это работает, но я не знаю, когда использовать <fragment />? Мне не удалось найти ответ, который вы отметили: /
Вы можете думать о <fragment> как о чем-то вроде постоянного приспособления в вашем макете; Хотелось особой разновидности View. Если вам не нужно динамически удалять / заменять Fragment во время выполнения, вы бы использовали это. Это полезно, когда вы хотите повторно использовать некоторые элементы пользовательского интерфейса вместе с их логикой поддержки в отдельных компонентах или проектах, но вам никогда не нужно менять их местами во время работы. Они могут немного облегчить жизнь в том, что касается жизненного цикла - например, во время ротации - потому что FragmentManager автоматически загружает их и отслеживает их за вас. Есть смысл?
Связанный дубликат теперь отображается в баннере вверху вашего вопроса. Возможно, вам потребуется обновить страницу. Вот опять ссылка, на всякий случай: stackoverflow.com/questions/29788837/….
Спасибо, теперь понял :)
Fragment, определенные в вашем макете, не могут быть удалены / заменены во время выполнения. Замените<fragment>на обычный<FrameLayout>и загрузитеFragment, который был в нем при запуске.