Android, Drawablelayout Draw하고 menu의 Item 클릭했는데 왜 클릭이 안돼!

이도현·2023년 8월 11일
0

Error Collection

목록 보기
7/13
  1. 개요
    제목 그대로의 문제다.. 이거 해결할려고 밤을 샜는데 의외로 간단한 문제였다. XX

  2. 코드

<androidx.drawerlayout.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 메인 콘텐츠 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <!-- 상단 바 -->
        <include layout="@layout/toolbar" />

        <!-- 텍스트뷰 -->
        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="기본 텍스트" />
    </LinearLayout>

    <!-- 좌측 드로어 -->
    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navigationView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start">

        <menu xmlns:app="http://schemas.android.com/apk/res-auto">
            <item
                android:id="@+id/nav_item1"
                android:title="아이템 1" />
            <item
                android:id="@+id/nav_item2"
                android:title="아이템 2" />
        </menu>
    </com.google.android.material.navigation.NavigationView>

</androidx.drawerlayout.widget.DrawerLayout>

MainActivity.kt

kotlinCopy code
import android.os.Bundle
import android.view.MenuItem
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GravityCompat
import com.google.android.material.navigation.NavigationView

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

    private lateinit var drawerLayout: DrawerLayout
    private lateinit var textView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        drawerLayout = findViewById(R.id.drawerLayout)
        textView = findViewById(R.id.textView)

        val navigationView: NavigationView = findViewById(R.id.navigationView)
        navigationView.setNavigationItemSelectedListener(this)

        val toolbar: Toolbar = findViewById(R.id.toolbar)
        setSupportActionBar(toolbar)
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_menu) // 좌측 상단 아이콘을 드로어로 변경

        toolbar.setNavigationOnClickListener {
            drawerLayout.openDrawer(GravityCompat.START) // 좌측 상단 아이콘 클릭 시 드로어 열기
        }
    }

    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        // 네비게이션 아이템 클릭 이벤트 처리
        when (item.itemId) {
            R.id.nav_item1 -> {
                textView.text = "아이템 1이 클릭되었습니다."
                drawerLayout.closeDrawer(GravityCompat.START) // 드로어 닫기
                return true
            }
            R.id.nav_item2 -> {
                textView.text = "아이템 2가 클릭되었습니다."
                drawerLayout.closeDrawer(GravityCompat.START) // 드로어 닫기
                return true
            }
            // 다른 아이템들에 대한 처리 추가
            // ...
        }
        return false
    }

    override fun onBackPressed() {
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START) // 드로어가 열려있을 때 뒤로가기 버튼 클릭 시 드로어 닫기
        } else {
            super.onBackPressed()
        }
    }
}
  1. 문제
  • View의 배치 문제였다. navigationView를 drawerlayout 안 Leanerlayout 안에 넣은 것이 문제였다.
profile
좋은 지식 나누어요

0개의 댓글