【问题标题】:Android- SearchView in ToolbarAndroid- 工具栏中的 SearchView
【发布时间】:2017-05-04 09:09:04
【问题描述】:

我只想在我的应用程序中添加搜索视图。但我不想搜索任何东西,只是我想要用户输入的查询。 到目前为止,我尝试了这段代码,但是当我运行我的应用程序时它崩溃了。

更新: 我试过这个,但即使我的应用程序崩溃了。

main_menu.xml 代码

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
  android:id="@+id/search"
  android:title="Search"
  android:icon="@android:drawable/ic_menu_search"
  app:actionViewClass="android.support.v7.widget.SerachView"
  app:showAsAction="always"
/>

MainActivity.java

 public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.main_menu,menu);
    SearchView searchView=(SearchView)findViewById(R.id.search);
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
         //   Toast.makeText(this,query,Toast.LENGTH_LONG).show();
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });
    return super.onCreateOptionsMenu(menu);
}

谁能帮我解决这个问题。 谢谢。

【问题讨论】:

  • 是时候使用调试器了
  • 为什么直接创建 SearchView 而不是作为菜单项添加?
  • 你能解释一下如何通过菜单项添加,因为我是 android.please 的新手
  • 不要直接使用SearchView,而是在你的main_menu中使用menu folder &gt; res

标签: android searchview


【解决方案1】:

我们不要在menu.xml 中直接使用SearchView

<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=".HomeActivity">

    <item
        android:id="@+id/action_search"
        android:icon="@android:drawable/ic_menu_search"
        android:title="Search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />
</menu>

并将这个简单的代码添加到您的 java 中:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_search:
            // Not implemented here
            return false;
        default:
            break;
    }
    searchView.setOnQueryTextListener(queryTextListener);
    return super.onOptionsItemSelected(item);
}

【讨论】:

    【解决方案2】:

    Main_Menu.xml

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
        <item
            android:id="@+id/action_search"
            app:actionViewClass="android.support.v7.widget.SearchView"
            app:showAsAction="always|collapseActionView"
            android:icon="@android:drawable/ic_menu_search"
            android:title="Search" />
    </menu>
    

    onCreateOptionMenu 方法

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.search_view_menu_item, menu);
        MenuItem searchViewItem = menu.findItem(R.id.action_search);
        final SearchView searchViewAndroidActionBar = (SearchView) MenuItemCompat.getActionView(searchViewItem);
        searchViewAndroidActionBar.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                searchViewAndroidActionBar.clearFocus();
                return true;
            }
    
            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });
        return super.onCreateOptionsMenu(menu);
    }
    

    【讨论】: