搜索查看getActionView返回null [英] SearchView getActionView returning null

查看:740
本文介绍了搜索查看getActionView返回null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是工作前几天,却突然停下。我只想用行动栏搜索插件,当某些片段是可见的。

现在我无法得到搜索查看,现在 getActionView 总是返回null。

searchable.xml

 < XML版本=1.0编码=UTF-8&GT?;
<可搜索的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
        机器人:标签=@字符串/ APP_NAME
        机器人:提示=@字符串/ search_for_places>
< /搜索>
 

的Manifest.xml

 <活动
    机器人:名称=。ui.activities.MainActivity
    机器人:launchMode =singleTop>
    <意向滤光器>
        <作用机器人:名称=android.intent.action.MAIN/>
        <类机器人:名称=android.intent.category.LAUNCHER/>
        <作用机器人:名称=android.intent.action.SEARCH/>
    &所述; /意图滤光器>
    &所述;元数据
        机器人:名称=android.app.searchable
        机器人:资源=@ XML /搜索/>
    &所述;元数据
    机器人:名称=android.app.default_searchable
    机器人:值=。ui.activities.MainActivity/>
< /活性GT;
 

menu.xml文件

 <菜单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
  的xmlns:的myapp =htt​​p://schemas.android.com/apk/res-auto>
    <项目
        机器人:ID =@ + ID / action_search_place
        机器人:图标=@可绘制/ ic_2_action_search
        机器人:orderInCategory =1
        机器人:标题=@字符串/ title_search
        的myapp:showAsAction =collapseActionView | ifRoom
        的myapp:actionViewClass =android.support.v7.widget.SearchView/>
< /菜单>
 

片段

  ...
setHasOptionsMenu(真正的);
...



@覆盖
公共无效onCreateOptionsMenu(最后菜单菜单,最后MenuInflater充气){
    inflater.inflate(R.menu.menu,菜单);
    菜单项searchItem = menu.findItem(R.id.action_search_place);
    mSearchView =(搜索查看)MenuItemCompat.getActionView(searchItem);

    SearchManager searchManager =(SearchManager)getBaseActivity()getSystemService(Context.SEARCH_SERVICE)。
    如果(mSearchView!= NULL){
        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity()getComponentName())。);
        mSearchView.setIconifiedByDefault(真正的);
        mSearchView.setOnQueryTextListener(本);
    }
    super.onCreateOptionsMenu(菜单,充气);
}
 

解决方案

今天我有同样的问题,我想我解决了它。事实证明,我做了几件事情是不完全一样按照 ActionBarCompat 合同:

  • 使用了 ActionBarCompat 应扩展<一个每个活动href="http://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html"><$c$c>ActionBarActivity而不是 FragmentActivity 直接
  • 在使用每一个活动的 ActionBarCompat 应申报其主题从 ActionBarCompat 主题的继承。

这两项我发现看着从谷歌解释影片的。

现在我的搜索查看不是了。

This was working a few days ago, but suddenly it stopped. I only want to use the action bar search widget when certain fragment is visible.

Now I'm unable to get the SearchView, now getActionView always returns null.

searchable.xml

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/app_name"
        android:hint="@string/search_for_places">
</searchable>

Manifest.xml

<activity
    android:name=".ui.activities.MainActivity"
    android:launchMode="singleTop">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
        <action android:name="android.intent.action.SEARCH"/>
    </intent-filter>
    <meta-data
        android:name="android.app.searchable"
        android:resource="@xml/searchable"/>
    <meta-data
    android:name="android.app.default_searchable"
    android:value=".ui.activities.MainActivity" />
</activity>

menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:myapp="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_search_place"
        android:icon="@drawable/ic_2_action_search"
        android:orderInCategory="1"
        android:title="@string/title_search"
        myapp:showAsAction="collapseActionView|ifRoom"
        myapp:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>

The fragment

...
setHasOptionsMenu(true);
...



@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
    inflater.inflate(R.menu.menu, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search_place);
    mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);

    SearchManager searchManager = (SearchManager) getBaseActivity().getSystemService(Context.SEARCH_SERVICE);
    if (mSearchView != null) {
        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
        mSearchView.setIconifiedByDefault(true);
        mSearchView.setOnQueryTextListener(this);
    }
    super.onCreateOptionsMenu(menu, inflater);
}

解决方案

Today I had the same problem and I think I solved it. It turns out I did couple of things that were not exactly as per the ActionBarCompat contract:

  • Each activity that uses the ActionBarCompat should extend ActionBarActivity instead of FragmentActivity directly
  • Each activity that uses the ActionBarCompat should declare its theme as inheriting from the ActionBarCompat themes.

Both of those I found watching the explanation video from Google.

Now my searchView is not null anymore.

这篇关于搜索查看getActionView返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆