概要
作成中の家計簿アプリで実装した内容を共有します!
実装内容
同じActivityに遷移するのだけど、押すボタンによって違うレイアウトで表示させたいなーと思いました。
実装方法
方法としてたくさんあるとは思いますが、私は遷移の際に以下の方法で実装しました!
①表示切り替えをするためのFlagを作成する
②遷移の際にFlagに値を渡す
③取得した値に沿って表示切り替えをする
以下、コードです。
※ポイントのコードのみ挙げます。
①表示切り替のためのFlag作成
BundleKey.kt
object BundleKey {
const val SPEND_INCOME_FLG = "SPEND_INCOME_FLG"
}
②遷移の際にFlagに値を渡す
MainActivity.ky
val spendBtn: TextView = findViewById(R.id.spending_btn)
spendBtn.setOnClickListener {
val intent = Intent(applicationContext, ContentsActivity::class.java).apply {
putExtra(BundleKey.SPEND_INCOME_FLG, 0)
putExtra(BundleKey.BOTTOM_NAVI_FLG, true)
}
startActivity(intent)
}
val incomeBtn: TextView = findViewById(R.id.income_btn)
incomeBtn.setOnClickListener {
val intent = Intent(applicationContext, ContentsActivity::class.java).apply {
putExtra(BundleKey.SPEND_INCOME_FLG, 1)
putExtra(BundleKey.BOTTOM_NAVI_FLG, false)
}
startActivity(intent)
}
③取得した値に沿って表示切り替えをする
ContentsActivity.kt
judge = intent?.getBooleanExtra(BundleKey.BOTTOM_NAVI_FLG, true) ?: false
binding.judge = judge
binding.apply {
judge?.let {
if (it) {
bottomNavigation.inflateMenu(R.menu.bottom_navigation_menu_spend)
bottomNavigation.setBackgroundColor(getColor(R.color.white))
bottomNavigation.itemTextAppearanceActive =
R.style.Widget_BottomNavigationView_spend
bottomNavigation.itemTextAppearanceInactive =
R.style.Widget_BottomNavigationView_spend
} else {
bottomNavigation.inflateMenu(R.menu.bottom_navigation_menu_income)
bottomNavigation.setBackgroundColor(getColor(R.color.black))
bottomNavigation.itemTextAppearanceActive =
R.style.Widget_BottomNavigationView_income
bottomNavigation.itemTextAppearanceInactive =
R.style.Widget_BottomNavigationView_income
}
}
}
activity_contents.xml
<layout>
<data>
<variable
name="judge"
type="Boolean" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/main_contents"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/bottom_navigation"
app:layout_constraintStart_toStartOf="parent"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:elevation="0dp"
app:itemTextColor="@{judge == true ? @color/black : @color/white}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/main_contents" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
最後に
少し端折り過ぎたかもしれませんが、何か質問などあればコメントお願いします!
他にもいい方法があるよ!って方は教えていただけると嬉しいです!!