简体   繁体   English

导航抽屉中的目标操作栏项目

[英]Target action bar item from navigation drawer

I am currently working on an app that i implemented a toolbar and a search functionality on the toolbar with a searchview to filter list views which is working fine. 我目前正在开发一个应用程序,该应用程序实现了工具栏和工具栏上的搜索功能,并带有一个searchview来过滤列表视图,效果很好。 I also have a navigation drawer whereby i also want one of its items to do exactly what the search functionality is doing on the toolbar. 我也有一个导航抽屉,我也希望它的其中一项能够完全执行工具栏上搜索功能的功能。 How do implement an intent to lead me to SearchView on toolbar when search item is clicked from navigation drawer. 从导航抽屉中单击search项时,如何实现将我引导到工具栏上的SearchView的意图。

menu_main for toolbar 工具栏的menu_main

<menu 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"
    tools:context=".MainActivity">

    <item
        android:id="@+id/viewMode"
        android:orderInCategory="100"
        app:showAsAction="never"
        android:icon="@drawable/ic_view_compact_black_24dp"
        android:title="@string/view" />
    <item
// my search functionality
        android:id="@+id/search"
        android:orderInCategory="100"
        app:actionViewClass= "android.support.v7.widget.SearchView"
        app:showAsAction="ifRoom"
        android:icon="@drawable/ic_search"
        android:title="@string/search" />


</menu>

activity_navdrawer activity_navdrawer

<?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/nav_notes"
            android:icon="@drawable/ic_note_add_black_24dp"
            android:title="@string/first_layout" />

        <item
// search functionality which should lead me to searchview on toolbar
            android:id="@+id/nav_search"
            android:icon="@drawable/ic_search_black_24dp"
            android:title="@string/third_layout" />
    </group>

    <item android:title="@string/app_communicate">
        <menu>
            <item
                android:id="@+id/nav_share"
                android:icon="@drawable/ic_share_black_24dp"
                android:title="@string/app_share" />
            <item
                android:id="@+id/nav_send"
                android:icon="@drawable/ic_email_black_24dp"
                android:title="@string/app_send" />
        </menu>
    </item>

</menu>

from main activity 来自主要活动

 public boolean onNavigationItemSelected(MenuItem item) {
      // Handling navigation view item clicks here.
            int id = item.getItemId();
            if(id == R.id.nav_notes) {
                Intent noteIntent = new Intent(this, MainActivity.class);
                startActivity(noteIntent);

            } else if(id == R.id.nav_search) {
MenuItem searchMenuItem = mOptionsMenu.findItem(R.id.search);
            searchMenuItem.expandActionView();
               // what should i implement here?


            }

            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            drawer.closeDrawer(GravityCompat.START);
            return true;
        }
     @Override
        public boolean onCreateOptionsMenu(`final` Menu menu) {


  mOptionsMenu = menu;
            MenuInflater inflater = getMenuInflater();
           inflater.inflate(R.menu.menu_main, menu);
            SearchManager searchManager =
                    (SearchManager) getSystemService(Context.SEARCH_SERVICE);
             searchView = (SearchView) menu.findItem(R.id.search).getActionView();
            searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
            searchView.setMaxWidth(Integer.MAX_VALUE);
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String query) {
                    return false;
                }

                @Override
                public boolean onQueryTextChange(String newText) {
                    ArrayAdapter<Note> arrayAdapter = (ArrayAdapter<Note>) mListNotes.getAdapter();
                    arrayAdapter.getFilter().filter(newText);
                    return false;
                }
            });
            return true;
        }

Try the following code below: 请尝试以下代码:

private Menu mOptionsMenu;

    ...

    @Override
    public boolean onCreateOptionsMenu(final Menu menu) {
        mOptionsMenu = menu;
        ...
    }

    ...

    public boolean onNavigationItemSelected(MenuItem item) {
    ...
    } else if(id == R.id.nav_search) {
        MenuItem searchMenuItem = mOptionsMenu.findItem(R.id.menu_search);
        searchMenuItem.expandActionView();
    }
    ...

Add <category android:name="android.intent.category.DEFAULT" /> to your search activity in manifest. <category android:name="android.intent.category.DEFAULT" />到清单中的搜索活动中。 Then do this: 然后执行以下操作:

else if(id == R.id.nav_search) {

       startActivity(new Intent(Intent.ACTION_SEARCH));

    }

If this works, courtesy - Start Activity Using Custom Action 如果可行,则礼貌- 使用“自定义操作”开始活动

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM