单击工具栏搜索打开导航抽屉

时间:2020-07-31 11:52:49

标签: android xml kotlin navigation-drawer android-toolbar

我正在开发一个具有底部导航菜单,导航抽屉和工具栏中的搜索功能的应用程序。我现在只有一件事正在工作-我遇到的问题是,当我单击工具栏上的“搜索图标”时,抽屉也在打开!我真的不明白为什么!我确定这是我看不到的简单事物,但是。 。

无论如何,有人可以帮忙吗!

NavigationActivity.kt

{% set user ['/user', user/detail/id']

<a {% if request.path in user %}class="active" {% else %} href="{{url_for('user.index')}}" {% endif %}>

navigation_drawer_menu.xml

int n = 8; // In the video n = 8  
int p = 0;
for (int i = 1; i < n; i *= 2) { // In the video i = 1
    p++;
}
for (int j = 1; j < p; j *= 2) { // In the video j = 1
    //code;
}

search_memu.xml

class NavigationActivity  : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener{
    
    lateinit var drawerLayout: DrawerLayout
    private lateinit var appBarConfiguration: AppBarConfiguration
    lateinit var navController: NavController
    lateinit var navView: BottomNavigationView
    lateinit var myNavView: NavigationView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_navigation)


        drawerLayout = findViewById(R.id.drawer_layout)
        navView = findViewById(R.id.nav_view)
        myNavView = findViewById(R.id.navigation_view) as NavigationView
        myNavView.setNavigationItemSelectedListener(this)

        navController = findNavController(R.id.nav_host_fragment)
        setupBottomNavigation()

        appBarConfiguration = AppBarConfiguration(setOf(
            R.id.navigation_map, R.id.navigation_list, R.id.navigation_workmates), drawerLayout)
        setupActionBarWithNavController(navController, appBarConfiguration)

    }
    override fun onSupportNavigateUp(): Boolean {
        return NavigationUI.navigateUp(navController,appBarConfiguration)

    }
    private fun setupBottomNavigation() {
        navView.setupWithNavController(navController)
    }


    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.search_menu, menu)


        val myActionMenuItem = menu!!.findItem(R.id.search)
        var searchView = myActionMenuItem.actionView as SearchView

        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
            override fun onQueryTextSubmit(query: String): Boolean {
                
                toast(query)
                myActionMenuItem.collapseActionView()
                return false
            }

            override fun onQueryTextChange(s: String): Boolean {
                
                drawerLayout.closeDrawer(GravityCompat.START)
                return false
            }
        })
        return true
    }
    override fun onOptionsItemSelected(item: MenuItem?): Boolean {

            val check = drawerLayout.isDrawerOpen(GravityCompat.START)
            if (!check) {
                drawerLayout.openDrawer(GravityCompat.START)
            } else {
                drawerLayout.closeDrawer(GravityCompat.START)
            }
        return true
    }


    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        var selectedOption = ""
        when (item?.itemId) {
            R.id.yourlunch -> selectedOption = "yourLunch"
            R.id.settings -> selectedOption = "settings"
            R.id.logout -> selectedOption = "logout"
        }
        when(selectedOption){
            "yourLunch" ->{
                toast("Your Lunch Selected")
            }
            "settings"->{
                toast("Settings Selected")
            }
            "logout" ->{
                toast("Logout Selected")
            }
        }
        return super.onOptionsItemSelected(item)
    }
}

在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

在onOptionsItemSelected方法上,您定义了单击任务栏中的选项时,它应该打开抽屉菜单。尝试将其删除。 如果要定义任务栏上要处理的项目,请在onOptionsItemSelected中使用以下用户代码:

when(item.getId()){

    R.id.item1 -> ////

    R.id.item2 -> ////

}

使用您提供给菜单项的ID。

答案 1 :(得分:0)

问题是您的onOptionsItemSelected()没有呼叫super.onOptionsItemSelected()- 是自动为android.R.id.home按钮分派呼叫并与{ {1}}通话。

鉴于onSupportNavigateUp()正在为您处理向上按钮,您可以删除整个onSupportNavigateUp()实施。