<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>coco_keh.log</title>
        <link>https://velog.io/</link>
        <description>개발자</description>
        <lastBuildDate>Fri, 10 Jun 2022 10:55:31 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>coco_keh.log</title>
            <url>https://velog.velcdn.com/images/coco_keh/profile/bc15a46d-614d-4715-83c0-25dc7ce771bf/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. coco_keh.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/coco_keh" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Android/Kotlin] BottomNavigationView와 ViewBinding]]></title>
            <link>https://velog.io/@coco_keh/AndroidKotlin-BottomNavigationView%EC%99%80-ViewBinding</link>
            <guid>https://velog.io/@coco_keh/AndroidKotlin-BottomNavigationView%EC%99%80-ViewBinding</guid>
            <pubDate>Fri, 10 Jun 2022 10:55:31 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/coco_keh/post/10065323-fb06-4189-876c-1a561059677c/image.png" alt=""></p>
<p>안드로이드 어플에서 하단에 위치한 바 형태의 메뉴탭을 만들고 클릭하면 화면이 전환되도록 해보자.</p>
<br>

<p>res - New - Android Resource Directory 클릭하면, 아래와 같은 창이 뜬다.</p>
<p><img src="https://velog.velcdn.com/images/coco_keh/post/4ebf3a66-2fb2-4128-870f-403aa68dc818/image.png" alt=""></p>
<p>여기에서 Resource type을 menu로 선택하고 Okay를 누르면 아래와 같이 menu 디렉토리가 생성된다.
<img src="https://velog.velcdn.com/images/coco_keh/post/1b79f84a-4cb6-419f-95be-b83bd61402cd/image.png" alt=""></p>
<p>menu 디렉토리에 자신이 원하는 이름으로 xml 파일을 하나 만들어서 커스텀하면 된다. (ex. bottom_nav_menu.xml) </p>
<p><item
    android:id="@+id/homeFragment"
    app:showAsAction="always"
    android:enabled="true"
    android:title="홈"
    tools:ignore="AlwaysShowAction" />
이런 식으로 아이템을 만들면 바텀 네비게이션 안에 하나의 메뉴로 들어가게 된다. </p>
<p>이제 layout에서 이 메뉴를 입혀주어야 한다.</p>
<p>_
activity_main.xml_</p>
<pre><code>
&lt;com.google.android.material.bottomnavigation.BottomNavigationView
        android:id=&quot;@+id/main_bnv&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
        app:layout_constraintEnd_toEndOf=&quot;parent&quot;
        app:layout_constraintStart_toStartOf=&quot;parent&quot;
        app:menu=&quot;@menu/bottom_nav_menu&quot; /&gt;</code></pre><p>여기까지 하면 하단에 bottom navigation bar는 생겼다.</p>
<p>그런데 내가 하고 싶은 것은 바텀 바에 아이템을 누르면 해당 페이지로 넘어가는 동작까지이기 때문에,</p>
<p>FrameLayout과 각 Fragment를 만들어서 binding을 통해 화면 전환을 해보도록 하자. </p>
<pre><code> &lt;FrameLayout
        android:id=&quot;@+id/main_frm&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;0dp&quot;
        app:layout_constraintEnd_toEndOf=&quot;parent&quot;
        app:layout_constraintStart_toStartOf=&quot;parent&quot;
        app:layout_constraintTop_toTopOf=&quot;parent&quot;
        app:layout_constraintBottom_toTopOf=&quot;@id/main_bnv&quot;&gt;
    &lt;/FrameLayout&gt;</code></pre><p>아까 만든 BottomNavigationView 위에 FrameLayout을 넣는다.</p>
<p>이제 activity나 class 파일이 위치한 java 폴더로 가서 New - Fragment 클릭해 생성</p>
<p>나는 _HomeFragment_를 먼저 만들었다.</p>
<pre><code>HomeFragment.kt

class HomeFragment : Fragment() {

    lateinit var binding: FragmentHomeBinding

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = FragmentHomeBinding.inflate(inflater, container, false)

        return binding.root
    }

}</code></pre><p>그 다음으론 바텀 바가 있는 _MainActivity_에 메뉴 아이템 클릭 리스너를 만들어준다.</p>
<p>함수 이름이나 세부 코드는 자기 스타일대로 적용하면 될 듯</p>
<pre><code>class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        initBottomNavigation()
    }

    private fun initBottomNavigation(){

        supportFragmentManager.beginTransaction()
            .replace(R.id.main_frm, HomeFragment())
            .commitAllowingStateLoss()

        binding.mainBnv.setOnItemSelectedListener{ item -&gt;
            when (item.itemId) {
                R.id.homeFragment -&gt; {
                    supportFragmentManager.beginTransaction()
                        .replace(R.id.main_frm, HomeFragment())
                        .commitAllowingStateLoss()
                    return@setOnItemSelectedListener true
                }
        }
 }</code></pre><p>아까 _activity_main.xml_에서의 id와 잘 매치시켜서 적어야 한다.</p>
<p>그리고 중요한 거!!!
<img src="https://velog.velcdn.com/images/coco_keh/post/40c3a2c2-6ba8-4225-91ce-383f01413eb8/image.png" alt=""></p>
<p>build.gradle에 viewBinding에 관한 코드를 꼭 작성해주어야 이 모든 것이 적용되니까 잊지말자.</p>
]]></description>
        </item>
    </channel>
</rss>