【问题标题】:SearchView not sending intent to result activitySearchView 未向结果活动发送意图
【发布时间】:2017-12-01 05:10:39
【问题描述】:

我的SearchView 似乎不起作用。 SearchView 显示在菜单栏中,我可以输入文本。但是,当我单击手机屏幕键盘上的搜索图标时,什么也没有发生。理想情况下,这将启动一个新活动,发送一个要使用的查询字符串。我尝试实现SearchView.setOnSearchClickListener 方法来处理点击,但是当我这样做时,只要我点击搜索图标输入文本,结果活动就会加载,没有参数。任何帮助指出我可能做错了什么都将不胜感激。

我在我的活动中这样创建菜单:

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

    return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.convert:
            ...
            return true;
        default:
           return super.onOptionsItemSelected(item);
    }
}

以及用于搜索的 xml:

<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="@string/search"
            android:icon="@android:drawable/ic_menu_search"
            app:showAsAction="always"
            android:actionViewClass="android.support.v7.widget.SearchView"
            app:actionViewClass="android.support.v7.widget.SearchView"/>

        <item android:id="@+id/convert"
            android:title="@string/dlconvert" />
    </menu>

我还在搜索显示的活动的清单中添加了这个:

<meta-data
        android:name="android.app.searchable"
        android:resource="@xml/searchable"/>

这是搜索结果活动的定义:

<activity android:name=".ActivitySearchResults">
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable"/>

        <intent-filter>
            <action android:name="android.intent.action.SEARCH"/>
        </intent-filter>
    </activity>

searchable.xml 文件只包含:

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/app_name"
        android:hint="Search..." />

编辑 - 问题与可能的重复问题不同。应该接收意图的活动根本不会启动。

【问题讨论】:

标签: android android-intent searchview


【解决方案1】:

试试

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.search_menu, menu);

        MenuItem item = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
        searchView.setOnQueryTextListener(this);

        SearchView.SearchAutoComplete searchAutoComplete = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
        searchAutoComplete.setHintTextColor(Color.GRAY);
        searchAutoComplete.setTextColor(Color.BLACK);


        return true;

    }

implements SearchView.OnQueryTextListener 到您的活动和覆盖方法

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String query) {
        Intent intent = new Intent(Activity.this, SearchActivity.class);
        intent.putExtra("query", query);
        startActivity(intent);
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        return false;
    }
}); 

【讨论】:

  • 当搜索结果活动是您的主要活动并且您不希望其他活动显示结果时,此答案是解决方案。甚至 android 文档也没有涵盖这一点。谢谢@悟空
【解决方案2】:

即使在实施onQueryTextSubmit 之后,问题仍然存在。经过一天的问题搜索,我终于意识到我在清单文件中错误的活动定义中有 &lt;action android:name="android.intent.action.SEARCH"/&gt; 意图过滤器。

【讨论】:

    【解决方案3】:

    在你的onCreateOptionsMenu():

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            Intent intent = new Intent(MainActivity.this, SearchActivity.class);
            intent.putExtra("searchTerm", query);
            startActivity(intent);
            return false;
        }
    
        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }
    });
    

    【讨论】:

      【解决方案4】:

      确保在搜索视图中实现 setOnQueryTextListener

      onQueryTextSubmit()方法中你想要的操作

      public boolean onCreateOptionsMenu(Menu menu) {
          MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.menu.main_menu, menu);
      
          // Associate searchable configuration with the SearchView
          SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
          final SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
          searchView.setOnQueryTextListener(new OnQueryTextListener() {
              @Override
              public boolean onQueryTextChange(String newText) {
                  //Log.e("onQueryTextChange", "called");
                  return false;
              }
      
              @Override
              public boolean onQueryTextSubmit(String query) {
                  // start acitivy here
                  return false;
              }
      
          });
          return true;
      

      }

      【讨论】:

        【解决方案5】:

        在显示SearchView的activity中你需要改变

        <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable"/>
        

        <meta-data
                android:name="android.app.default_searchable"
                android:value="ActivitySearchResults" />
        

        【讨论】:

          【解决方案6】:

          您必须使“searchResultActivity”可搜索。在清单文件中的活动(具有搜索视图)中添加以下代码。

          <meta-data
                          android:name="android.app.default_searchable"
                          android:value=".SearchResultActivity" /> 
          

          【讨论】:

            猜你喜欢
            • 2016-05-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-06
            • 1970-01-01
            • 1970-01-01
            • 2018-09-30
            相关资源
            最近更新 更多