0

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. 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 SearchViewon toolbar when searchitem is clicked from navigation drawer.

menu_main for toolbar

<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

<?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;
        }
benruty
  • 89
  • 1
  • 1
  • 7

2 Answers2

0

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();
    }
    ...
aborocz
  • 199
  • 2
  • 9
0

Add <category android:name="android.intent.category.DEFAULT" /> to your search activity in manifest. 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

Nithin
  • 221
  • 3
  • 14
  • i want to open the search view item on the toolbar. your code is sending an intent away from the app. – benruty Aug 11 '17 at 14:50
  • Okay, cut the `startActivity()` and do: `if(mySearchView.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); }` `mySearchView` should be replaced with your `SearchView` object – Nithin Aug 12 '17 at 04:40
  • it just displays main content when clicked. doesn't open up searchview menu item on toolbar – benruty Aug 12 '17 at 06:38