본문 바로가기

개발 노트/Kotlin

버튼 눌렀을때 Fragment화면 나타내기

안드로이드에서는 화면을 바꾸는 방법이 두가지가 있는데

첫번째는 새로운 엑티비티를 띄우는 방식

두번째는 엑티비티의 일부만 바꾸는 방식(프레그먼트를 통해)

이렇게 두가지가 있다

 

오늘은 두번째방식인 버튼을 눌렀을때 프레그먼트를 통해 엑티비티의 일부를 바꿔보는 방법을 기록해보려고 한다

 

 

 

 

일단 버튼을 만들어주고, 프레그먼트가 들어갈부분을 FrameLayout으로 만들어준다

디자인을 보면 FrameLayout부분이 이렇게 공간을 차지하고있는것을 볼수있다. 이부분에 프레그먼트를 넣어줄것이다

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="btn 1"
        android:textColor="@color/textpink"
        android:textSize="15sp"
        android:textStyle="bold"
        android:layout_marginStart="10dp"
        android:layout_marginTop="10dp"
        android:background="@drawable/button_radius_pink"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button">

    </FrameLayout>


</androidx.constraintlayout.widget.ConstraintLayout>

activity_main.xml

activity_main.xml

 

 

 

 

이제 새로운 프레그먼트를 만들어준다.

뷰바인딩을 사용해서 바인딩만 미리 설정해줬고, 디자인은 텍스트뷰만 추가해줬다

class DonutListFragment : Fragment() {

    lateinit var binding: FragmentDonutListBinding

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentDonutListBinding.inflate(inflater, container, false)

        return binding.root
    }

}

DonumListFragement.kt

 

fragment_donut_list.xml

 

 

 

 

MainActivity로가서 button을 눌렀을때, beginTransaction()을 이용해 Fragment를 만들어주고,

아까 만들었던 frameLayout부분을 DonumListFragement()로 대체해주는 코드를 아래와같이 짜준다

class MainActivity : AppCompatActivity() {

    private lateinit var binding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)


        binding.button.setOnClickListener {
            supportFragmentManager.beginTransaction()
                .replace(R.id.frameLayout, DonutListFragment())
                .commit()
        }


    }
}

MainActivity.kt

 

 

 

 

 

이제 이걸 실행해주면!

이런식으로 버튼을 눌렀을때 연결해준 프레그먼트가 나오는것을 확인할 수 있다!!

 

 

 

만약 버튼을 더 만들어서 각자 다른 프레그먼트들을 더 띄우고 싶다면

버튼을 또 추가해주고, 새로운 프레그먼트들을 생성해준다음, MainActivity에서 해당하는 버튼을 클릭했을때 해당하는 프레그먼트들을 연결해주는 방식으로 동일하게 해주면 될것이다!

 

 

 

 

# 참고한 블로그

https://korean-otter.tistory.com/83

 

[android] [kotlin] Fragment 사용하기

Fragment 시작합니다! 안드로이드에서 화면을 바꾸는 방법이 두 가지가 있는데 하나는 새로운 액티비티를 띄우는 방식 다른 하나는 액티비티의 일부만 바꾸는 방식(프레그먼트) 이렇게 두 방식이

korean-otter.tistory.com