안드로이드에서는 화면을 바꾸는 방법이 두가지가 있는데
첫번째는 새로운 엑티비티를 띄우는 방식,
두번째는 엑티비티의 일부만 바꾸는 방식(프레그먼트를 통해)
이렇게 두가지가 있다
오늘은 두번째방식인 버튼을 눌렀을때 프레그먼트를 통해 엑티비티의 일부를 바꿔보는 방법을 기록해보려고 한다
일단 버튼을 만들어주고, 프레그먼트가 들어갈부분을 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
이제 새로운 프레그먼트를 만들어준다.
뷰바인딩을 사용해서 바인딩만 미리 설정해줬고, 디자인은 텍스트뷰만 추가해줬다
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
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
'개발 노트 > Kotlin' 카테고리의 다른 글
[Android] Fragment Lifecycle (0) | 2024.03.29 |
---|---|
[Android] Activity Stack 및 backStack (0) | 2024.03.29 |
코틀린의 ViewBinding과 DataBinding (0) | 2024.03.28 |
[Android] 엑티비티 생명주기(Activity Life Cycle) (0) | 2024.03.26 |
프로그래밍 기초 과제 - 계산기 (0) | 2024.03.25 |