setNavigationItemSelectedListener не работает - PullRequest
0 голосов
/ 09 апреля 2020

Когда я щелкаю элемент в ящике навигации, он должен показывать тостовое сообщение, но он не работает. Я проверил, другая функция показывает тост, но только навигационный ящик не отвечает. Пожалуйста, помогите узнать, почему это не работает. Почему тост сообщение не появляется.

class MainActivity : AppCompatActivity(){

lateinit var toolbar: Toolbar
lateinit var drawerLayout: DrawerLayout
lateinit var navView: NavigationView


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


    toolbar = findViewById(R.id.toolbar)
    setSupportActionBar(toolbar)

    supportActionBar!!.setDisplayShowHomeEnabled(false)
    supportActionBar!!.setDisplayHomeAsUpEnabled(false)

    drawerLayout = findViewById(R.id.drawer_layout)
    navView = findViewById(R.id.nav_view)

    val toggle = ActionBarDrawerToggle(
        this, drawerLayout, toolbar, 0, 0
    )
    drawerLayout.addDrawerListener(toggle)



    navView.setNavigationItemSelectedListener(object : 
NavigationView.OnNavigationItemSelectedListener{
        override fun onNavigationItemSelected(item: MenuItem): Boolean {
            when (item.itemId) {
                R.id.nav1 -> {
                    toast("Update")
                }
                R.id.nav2 -> {
                    toast("Update")
                }
                R.id.nav3 -> {
                    toast("Update")
                }
                R.id.nav4 -> {
                    toast("Update")
                }
                R.id.nav5 -> {
                    toast("Update")
                }
                R.id.nav6 -> {
                    toast("Update")
                }
                R.id.nav7 -> {
                    toast("Update")
                }
                R.id.nav8 -> {
                    toast("Update")
                }
                R.id.nav9 -> {
                    toast("Update")
                }
            }

            return true
        }

    })

    bottomNavigationView.setOnNavigationItemSelectedListener { item: MenuItem ->
        return@setOnNavigationItemSelectedListener when (item.itemId) {
            R.id.main -> {

          replaceFragment(GlavnayaFragment())
                toast("Главная")
                true
            }
            R.id.izbraniye -> {
           replaceFragment(IzbraniyeFragment())

                true
            }
            R.id.tickets -> {
            replaceFragment(TicketsFragment())
                true
            }
            R.id.cabinet -> {
            replaceFragment(KabinetFragment())
                true
            }
            R.id.basket -> {
            replaceFragment(KarzinkiFragment())

                true
            }
            else -> false

        }

    }
   replaceFragment(GlavnayaFragment())

}



private fun replaceFragment(fragment: Fragment){
    val fragmentTransaction = supportFragmentManager.beginTransaction()
    fragmentTransaction.replace(R.id.drawer_layout,fragment)
    fragmentTransaction.commit()
}

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.right_side_menu,menu)
    return true
}


override fun onOptionsItemSelected(item: MenuItem): Boolean {
    if(item!!.itemId == R.id.btnMyMenu){
        if(drawerLayout.isDrawerOpen(Gravity.RIGHT)){
            drawerLayout.closeDrawer(Gravity.RIGHT)
        }
        else{
            drawerLayout.openDrawer(Gravity.RIGHT)
        }
    }
    return super.onOptionsItemSelected(item)
}}

Activity_main. xml

 <?xml version="1.0" encoding="utf-8"?>
 <androidx.drawerlayout.widget.DrawerLayout
 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:id="@+id/drawer_layout"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:fitsSystemWindows="true"
 tools:openDrawer="end">

<include
    layout="@layout/content_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<com.google.android.material.navigation.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="end"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header"
    app:menu="@menu/nav_menu"/>
 </androidx.drawerlayout.widget.DrawerLayout>

nav_menu. xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
 >

 <group android:checkableBehavior="single">
    <item
        android:id="@+id/nav1"
        android:title="Как это работает"/>
    <item
        android:id="@+id/nav2"
        android:title="Продукты"/>
    <item
        android:id="@+id/nav3"
        android:title="Благотворительная"/>
    <item
        android:id="@+id/nav4"
        android:title="Компании"/>
    <item
        android:id="@+id/nav5"
        android:title="Выбрать Язык"/>
 </group>

 <item android:title="Связаться c нами">
    <menu>
        <item
            android:id="@+id/nav6"
            android:title="Тел: 8800 7867896"
            android:icon="@drawable/ic_phone"/>
        <item
            android:id="@+id/nav7"
            android:title="e-mail: info@buywin.uz "
            android:icon="@drawable/ic_email"/>
    </menu>
 </item>
 <item android:title="Настройка учетной записи">
    <menu>
        <item
            android:id="@+id/nav8"
            android:title="Регистрация"
            android:icon="@drawable/ic_registration"/>
        <item
            android:id="@+id/nav9"
            android:title="Войти"
            android:icon="@drawable/ic_in"/>
    </menu>
 </item>
 </menu>

1 Ответ

0 голосов
/ 09 апреля 2020

Вы должны добавить setNavigationItemSelectedListener

Установить прослушиватель, который будет уведомляться при выборе пункта меню.

navView.setNavigationItemSelectedListener(this)

Тогда

override fun onNavigationItemSelected(item: MenuItem): Boolean {
       // Handle navigation view item clicks here.

        when (item.itemId) {

            R.id.nav1 -> {
                    toast("Update")
                }

           ......
        }

        drawerLayout.closeDrawer(GravityCompat.START)
        return true
    }

К вашему сведению

Вы переопределите метод его интерфейса. NavigationView.OnNavigationItemSelectedListener

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener{}
...