Fragment를 가진 메인 xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".main.MainActivity">
<FrameLayout
android:id="@+id/fragment_warp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bnav"
app:menu="@menu/bottom_menu"
app:itemTextColor="@color/bnv_item_color"
app:itemIconTint="@color/bnv_item_color"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</com.google.android.material.bottomnavigation.BottomNavigationView>
</LinearLayout>
supportFragmentManager 를 통해서 프래그먼트를 얻어온다
첫 화면은 add로 가져옴
바텀 네비를 setOnItemSelectedListener 를 통해서 클릭 시 반응하도록 함
itemId 를 통해 분기처리함 navmenu 만들때 쓴 id로 분기처리
버튼을 눌렀을 때 화면이 바뀌는 것은
replce를 쓴다
package com.jscompany.neerbyto.main
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.jscompany.neerbyto.R
import com.jscompany.neerbyto.chat.MainChatFragment
import com.jscompany.neerbyto.databinding.ActivityMainBinding
import com.jscompany.neerbyto.profile.MainMyZoneFragment
import com.jscompany.neerbyto.trede.MainTredeFragment
class MainActivity : AppCompatActivity() {
private val binding:ActivityMainBinding by lazy { ActivityMainBinding.inflate(layoutInflater) }
//바텀네비
private val bottomnavi:BottomNavigationView by lazy { binding.bnav }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
//맨 처음 보여줄 플래그먼트 데려오기
supportFragmentManager.beginTransaction().add(R.id.fragment_warp, MainTredeFragment()).commit()
//바텀 네비게이션에 연동
bottomnavi.setOnItemSelectedListener {
if(it.itemId == R.id.bnv_home) supportFragmentManager.beginTransaction().replace(R.id.fragment_warp, MainTredeFragment()).commit()
else if(it.itemId == R.id.bnv_chat) supportFragmentManager.beginTransaction().replace(R.id.fragment_warp, MainChatFragment()).commit()
else if(it.itemId == R.id.bnv_myzone) supportFragmentManager.beginTransaction().replace(R.id.fragment_warp, MainMyZoneFragment()).commit()
return@setOnItemSelectedListener true
}
}
}
package com.jscompany.neerbyto.main
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.fragment.app.Fragment
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.jscompany.neerbyto.R
import com.jscompany.neerbyto.chat.MainChatFragment
import com.jscompany.neerbyto.databinding.ActivityMainBinding
import com.jscompany.neerbyto.profile.MainMyZoneFragment
import com.jscompany.neerbyto.trede.MainTredeFragment
class MainActivity : AppCompatActivity() {
private val binding:ActivityMainBinding by lazy { ActivityMainBinding.inflate(layoutInflater) }
//바텀네비
private val bottomnavi:BottomNavigationView by lazy { binding.bnav }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
//맨 처음 보여줄 플래그먼트 데려오기
supportFragmentManager.beginTransaction().add(R.id.fragment_warp, MainTredeFragment()).commit()
//바텀 네비게이션에 연동
bottomnavi.setOnItemSelectedListener {
changeFragment(it.itemId)
true
}
// 첫 화면
changeFragment(R.id.bnv_home)
}
//플래그먼트 변경 함수
private fun changeFragment(menuItemId:Int){
val targetFragment = getFragment(menuItemId)
supportFragmentManager.beginTransaction().replace(R.id.fragment_warp, targetFragment).commit()
}
// 플래그먼트 화면 반환 함수
private fun getFragment(menuItemId: Int) : Fragment {
val fragment = when (menuItemId) {
R.id.bnv_home -> MainTredeFragment()
R.id.bnv_chat -> MainChatFragment()
R.id.bnv_myzone -> MainMyZoneFragment()
else -> throw IllegalArgumentException("not found menu item id")
}
return fragment
}
}