NavigationView上的OnClickListener无法正常工作

时间:2018-12-31 11:56:34

标签: android kotlin navigationview

我是第一次使用NavigationView,但遇到了问题。

当我单击NavigationView中的项目时,它会转到开始位置而没有显示吐司。

这是我的代码:

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

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

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

    phoneBTT.setOnClickListener {
        Toast.makeText(this, "Phone BTT is clicked", Toast.LENGTH_LONG).show()
    }
}

override fun onNavigationItemSelected(item: MenuItem): Boolean {

    when(item.itemId)
    {
        R.id.galleryBTT -> {
            Toast.makeText(this, "Gallery BTT is clicked", Toast.LENGTH_LONG).show()
        }

        R.id.exitBTT -> {
            Toast.makeText(this, "Exit BTT is clicked", Toast.LENGTH_LONG).show()
        }

        R.id.alarmBTT -> {
            Toast.makeText(this, "Alarm BTT is clicked", Toast.LENGTH_LONG).show()
        }

        R.id.creditCardBTT -> {
            Toast.makeText(this, "CreditCard BTT is clicked", Toast.LENGTH_LONG).show()
        }
    }

    return true
}

3 个答案:

答案 0 :(得分:0)

像这样使用导航视图

private void setupNavigationView() {
    BottomNavigationViewHelper.disableShiftMode(bottomNavigation);

    menu = bottomNavigation.getMenu();
    selectFragment(menu.getItem(0));

    bottomNavigation.setOnNavigationItemSelectedListener(
            item -> {
                selectFragment(item);
                return false;
            });
}

protected void selectFragment(MenuItem item) {
    item.setChecked(true);
    FragmentManager fm = getSupportFragmentManager();
    switch (item.getItemId()) {
        case R.id.galleryBTT:
            //Put your Code here
            break;
        case R.id.exitBTT:
            //Put your Code 
            break;
        case R.id.creditCardBTT :
           //Put your Code 
            break;
    }
}

答案 1 :(得分:0)

这是我的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">



<android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">




    <Button
            android:text="Button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/button" android:layout_marginTop="228dp"
            app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"
            android:layout_marginStart="192dp"/>

    <android.support.v7.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:theme="?attr/actionBarTheme"
            android:minHeight="?attr/actionBarSize" android:id="@+id/toolbar3"/>


    <Button
            android:layout_width="36dp"
            android:layout_height="46dp" android:id="@+id/phoneBTT"
            app:layout_constraintEnd_toEndOf="@+id/toolbar3" app:layout_constraintStart_toStartOf="@+id/toolbar3"
            android:layout_marginStart="8dp"
            app:layout_constraintBottom_toBottomOf="@+id/toolbar3" android:layout_marginTop="8dp"
            app:layout_constraintTop_toTopOf="@+id/toolbar3" app:layout_constraintHorizontal_bias="0.023"
            app:layout_constraintVertical_bias="0.0"
            android:background="@drawable/ic_phone_black_24dp"/>



</android.support.constraint.ConstraintLayout>

<android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:menu="@menu/nav_menu" android:id="@+id/navigationView">

</android.support.design.widget.NavigationView>

上一个NavigationView位于此脚本的顶部(在DrawerLayout中)。 当我把它放到最下面时,它开始工作了!

答案 2 :(得分:0)

NavigationView是一种与DrawerLayout一起显示菜单资源中的导航菜单的简便方法,可在appbar布局上实现精心设计的导航菜单。NavigationView是设计支持库的小部件。

将DrawerLayout添加为父级布局,将NavigationView作为DrawerLayout的直接子级:

<android.support.design.widget.NavigationView
    android:id="@+id/nav_View"
     android:layout_width="wrap_content"
     android:layout_height="match_parent"
     android:layout_gravity="start"
     app:menu="@menu/nav_menu">

</android.support.design.widget.NavigationView>

在res / menu / nav_menu.xml中创建菜单资源文件:

    <item
        android:id="@+id/action_home"
        android:enabled="true"
        android:icon="@drawable/ic_home_black_24dp"
        android:title="@string/home"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_msg"
        android:enabled="true"
        android:icon="@drawable/ic_message_black_24dp"
        android:title="@string/msg"
        app:showAsAction="ifRoom" />
    <item
        android:id="@+id/action_video"
        android:enabled="true"
        android:icon="@drawable/ic_ondemand_video_black_24dp"
        android:title="@string/video"
        app:showAsAction="ifRoom" />

现在实现导航视图的onNavigationItemSelectedListener,以显示toast消息onMainActivity.java文件中不同菜单项的点击:

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

    switch (menuItem.getItemId()) {
        case R.id.action_home:
            Toast.makeText(this, "Home is clicked", Toast.LENGTH_LONG).show();
            break;
        case R.id.action_msg:
            Toast.makeText(this, "Message is clicked", Toast.LENGTH_LONG).show();
            break;
        case R.id.action_video:
            default:
            Toast.makeText(this, "Video is clicked", Toast.LENGTH_LONG).show();
            break;

    }
    mDrawer.closeDrawers();
    return true;

}

查看此答案:How to implement navigation drawer in android app ?

快乐编码...