Котлин. Возможно лы перейти с Activity в Fragment(без добавления в activity через (.add) как в коде)

Есть код
LoginPage

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.LinearLayout
import androidx.fragment.app.Fragment
import com.example.hospital.Fragments.HomeFragment

class LoginPage : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login_page)

        val button1 : LinearLayout = findViewById(R.id.LinearFragment_Container)
        val ButtonOpen : Button = findViewById(R.id.btnLogin)
        ButtonOpen.setOnClickListener {
            val homeFragment = HomeFragment()
            val fragment : Fragment?=

            supportFragmentManager.findFragmentByTag(HomeFragment::class.java.simpleName)

            if (fragment !is HomeFragment){
                supportFragmentManager.beginTransaction()
                    .add(R.id.btnLoginForm, homeFragment,HomeFragment::class.java.simpleName)
                    .commit()
            }
            button1.visibility = View.GONE
        }
    }
}

И вот что получается:

За фрагменты отвечает MainActivity

А Я хотел чтобы fragment открывался в отдельном окне (то есть так):


Ответы (2 шт):

Автор решения: Dmitry Avdoshin

первый вариант, который пришел в голову это задать background вашему фрагменту, тогда фон не будет прозрачным Второй вариант это внутри активити сделать контейнер для фрагмента

    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <!-- TODO: Update blank fragment layout -->
    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

И в активити в качестве контейнера для фрагмента указывать FragmentContainerView

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val homeFragment = HomeFragment()
    supportFragmentManager.beginTransaction()
        .add(R.id.fragment_container, homeFragment,HomeFragment::class.java.simpleName)
        .commit()

}
→ Ссылка
Автор решения: Романыч

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

Более правильный варик - ативити юзать сугубо как контейнер. На сарте запихивать первый фрагмент и потом просто делать реплейс.

В активити только FragmentContainerView больше там ничего не нужно

 <?xml version="1.0" encoding="utf-8"?>

<androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
/>

на старте активити проверяете что то типа if savedInstanceState != null и кладете первый фрагмент, дальше вся движуха в нем. Активити только как контейнер

→ Ссылка