반응형
Kotlin으로 Fragment 기능 구현
구조 : main Activity 가 있고, 일부 영역에 Fragment 화면을 보여줌
구성 : MainActivity, Fragment1, Fragment2 와 각각의 layout 3개.
버튼을 누르면 해당 Fragment가 나옴.
MainActivity.kt
package kr.co.enigmah2k.myfragment import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_main.* import kr.co.enigmah2k.myfragment.fg.ImageFragment import kr.co.enigmah2k.myfragment.fg.TextFragment class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // Set a click listener for first button widget button1.setOnClickListener { // Get the text fragment instance val textFragment = TextFragment() // Get the support fragment manager instance val manager = supportFragmentManager // Begin the fragment transition using support fragment manager val transaction = manager.beginTransaction() // Replace the fragment on container transaction.replace(R.id.fragment_container,textFragment) transaction.addToBackStack(null) // Finishing the transition transaction.commit() } // Set a click listener for second button widget button2.setOnClickListener { // Get the text fragment instance val imageFragment = ImageFragment() // Get the support fragment manager instance val manager = supportFragmentManager // Begin the fragment transition using support fragment manager val transaction = manager.beginTransaction() // Replace the fragment on container transaction.replace(R.id.fragment_container,imageFragment) transaction.addToBackStack(null) // Finishing the transition transaction.commit() } } } |
activity_main.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> < Button android:text="button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button1" android:layout_marginTop="8dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="64dp"/> < Button android:text="Button2" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:layout_editor_absoluteY="8dp" android:id="@+id/button2" app:layout_constraintStart_toEndOf="@+id/button1" android:layout_marginStart="64dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp"/> < LinearLayout android:id="@+id/fragment_container" android:orientation="vertical" android:layout_width="401dp" android:layout_height="539dp" android:background="#c1cfba" tools:layout_editor_absoluteX="5dp" android:layout_marginTop="96dp" app:layout_constraintTop_toTopOf="parent" android:layout_marginBottom="8dp" app:layout_constraintBottom_toBottomOf="parent"> </androidx.constraintlayout.widget.ConstraintLayout> |
TextFragment.kt
package kr.co.enigmah2k.myfragment.fg import android.graphics.Color import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.TextView import android.widget.Toast import androidx.fragment.app.Fragment import kr.co.enigmah2k.myfragment.R class TextFragment : Fragment(){ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Get the custom view for this fragment layout val view = inflater!!.inflate(R.layout.layout_text_fragment,container,false) // Get the text view widget reference from custom layout val tv = view.findViewById(R.id.text_view) // Set a click listener for text view object tv.setOnClickListener{ // Change the text color tv.setTextColor(Color.RED) // Show click confirmation Toast.makeText(view.context,"TextView clicked.",Toast.LENGTH_SHORT).show() } // Return the fragment view/layout return view } override fun onPause() { super.onPause() } /* override fun onAttach(context: Context?) { super.onAttach(context) } */ override fun onDestroy() { super.onDestroy() } override fun onDetach() { super.onDetach() } override fun onStart() { super.onStart() } override fun onStop() { super.onStop() } } |
layout_text_fragment.xml
< ?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> < TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a sample text from Text Fragment" android:textSize="50sp" /> |
ImageFragment.kt
package kr.co.enigmah2k.myfragment.fg import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import kr.co.enigmah2k.myfragment.R class ImageFragment : Fragment(){ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Return the fragment view/layout return inflater!!.inflate(R.layout.layout_image_fragment,container,false) } override fun onPause() { super.onPause() } /* override fun onAttach(context: Context?) { super.onAttach(context) } */ override fun onDestroy() { super.onDestroy() } override fun onDetach() { super.onDetach() } override fun onStart() { super.onStart() } override fun onStop() { super.onStop() } } |
layout_image_fragment.xml
< ?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> < ImageView android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/flower" /> |
참고
https://android--code.blogspot.com/2018/02/android-kotlin-fragment-example.html
반응형
'프로그래밍 > Kotlin' 카테고리의 다른 글
Kotlin - Retrofit 간단 사용법 (0) | 2020.11.19 |
---|---|
Kotlin API docs (0) | 2020.10.19 |
Play Store 에 앱 올리기 android kotlin 후기 및 간단 가이드 (0) | 2020.06.22 |
Admob Kotlin Android 애드몹 코틀린 안드로이드 (2) | 2020.06.16 |
코틀린 Kotlin (0) | 2020.01.30 |