Fragments en Kotlin
manejo de fragments en Kotlin
Fragments
Crear el proyecto FragmentExample
build.gradle
buildFeatures {
viewBinding = true
}
colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="blue">#80D8FF</color>
<color name="red">#FF80AB</color>
<color name="purple">#673AB7</color>
</resources>
creación de los 2 fragments
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/red">
<Button
android:id="@+id/btnPlus"
android:text="+1"
android:layout_gravity="center"
android:background="@color/red"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</FrameLayout>
fragment_blue.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blue">
<Button
android:id="@+id/btnPlus"
android:text="+1"
android:layout_gravity="center"
android:background="@color/blue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</FrameLayout>
OnFragmentActionsListener.kt
interface OnFragmentActionsListener {
fun onClickFragmentButton()
}
RedFragment.kt
class RedFragment : Fragment() {
private lateinit var _binding: FragmentRedBinding
private val binding get() = _binding
private lateinit var listener: OnFragmentActionsListener
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is OnFragmentActionsListener) {
listener = context
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentRedBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// view binding in fragment
binding.btnPlus.setOnClickListener { listener.onClickFragmentButton() }
}
override fun onDetach() {
super.onDetach()
// listener = null
binding.btnPlus.setOnClickListener { }
}
}
BlueFragment.kt
class BlueFragment : Fragment() {
private lateinit var _binding: FragmentBlueBinding
private val binding get() = _binding
private lateinit var listener: OnFragmentActionsListener
override fun onAttach(context: Context) {
super.onAttach(context)
if (context is OnFragmentActionsListener) {
listener = context
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentBlueBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//btnPlus = requireView().findViewById(R.id.btnPlus)
binding.btnPlus.setOnClickListener { listener.onClickFragmentButton() }
}
override fun onDetach() {
super.onDetach()
// listener = null
binding.btnPlus.setOnClickListener { }
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:name="com.example.fragmentexample.RedFragment"
android:id="@+id/first"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
<fragment
android:name="com.example.fragmentexample.BlueFragment"
android:id="@+id/second"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
MainActivity.kt
class MainActivity : AppCompatActivity(), OnFragmentActionsListener {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
override fun onClickFragmentButton() {
Toast.makeText(this, "El botón ha sido pulsado", Toast.LENGTH_SHORT).show()
}
}
activity_main.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"
android:background="@color/purple"
android:orientation="vertical">
<Button
android:id="@+id/btnRed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:padding="8dp"
android:layout_margin="5dp"
android:background="@color/red"
android:text="Fragment rojo" />
<Button
android:id="@+id/btnBlue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:layout_gravity="center_horizontal"
android:layout_margin="5dp"
android:background="@color/blue"
android:text="Fragment azul" />
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
MainActivity.kt
class MainActivity : AppCompatActivity(), OnFragmentActionsListener {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// replaceFragment(RedFragment())
binding.btnRed.setOnClickListener { replaceFragment(RedFragment()) }
binding.btnBlue.setOnClickListener { replaceFragment(BlueFragment()) }
}
private fun replaceFragment(fragment: Fragment){
val fragmentTransaction = supportFragmentManager.beginTransaction()
fragmentTransaction.replace(binding.fragmentContainer.id, fragment)
fragmentTransaction.addToBackStack(null)
fragmentTransaction.commit()
}
override fun onClickFragmentButton() {
Toast.makeText(this, "El botón ha sido pulsado", Toast.LENGTH_SHORT).show()
}
}
Bottom navigation:
How to create bottom navigation in Android using Kotlin
Más información:
Chip Bottom Navigation Bar in Android with Kotlin



Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.