【问题标题】:Target action bar item from navigation drawer导航抽屉中的目标操作栏项目
【发布时间】:2017-08-11 10:43:56
【问题描述】:

我目前正在开发一个应用程序,该应用程序在工具栏上实现了一个工具栏和一个搜索功能,并带有一个搜索视图来过滤运行正常的列表视图。 我还有一个导航抽屉,我还希望它的一个项目能够完全按照工具栏上的搜索功能所做的工作。当从导航抽屉中单击searchitem 时,如何实现将我引导至工具栏上的SearchView的意图。

工具栏的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

<?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>

来自主要活动

 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;
        }

【问题讨论】:

    标签: java android


    【解决方案1】:

    试试下面的代码:

    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();
        }
        ...
    

    【讨论】:

    • 它没有按预期工作,先生。它只是为空。有没有办法从导航抽屉打开工具栏的搜索视图?
    • 你的意思是它只是为空?
    • 点击时只显示主要内容。没有在工具栏上打开 searchview 菜单项
    • 使用R.id.search 而不是R.id.menu_search
    • 正是我所做的。你可以检查我上面编辑的代码。给我同样的结果
    【解决方案2】:

    &lt;category android:name="android.intent.category.DEFAULT" /&gt; 添加到清单中的搜索活动。然后这样做:

    else if(id == R.id.nav_search) {
    
           startActivity(new Intent(Intent.ACTION_SEARCH));
    
        }
    

    如果可行,请注意 - Start Activity Using Custom Action

    【讨论】:

    • 我想打开工具栏上的搜索视图项。您的代码正在从应用程序中发送一个意图。
    • 好的,剪掉startActivity() 并执行以下操作:if(mySearchView.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } mySearchView 应该替换为您的SearchView 对象
    • 点击时只显示主要内容。没有在工具栏上打开 searchview 菜单项
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多