【问题标题】:Searchable Configuaration Returning Null For the SearchViewSearchView 的可搜索配置返回 Null
【发布时间】:2012-12-15 07:41:17
【问题描述】:

我创建了一个搜索界面,但我似乎无法将ActionBar 中的SearchView 连接到我的可搜索配置文件。当我尝试在我的 onCreateOptionsMenu 方法中检索它时,SearchManager.getSearchableInfo(getComponentName() 返回 null。有人可以帮我解决这个问题吗?

Settings.onCreateOptionsMenu(菜单)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_main, menu);

    SearchManager sm = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView sv = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    SearchableInfo info = sm.getSearchableInfo(getComponentName()); //This variable is returned as null                                                      
    sv.setSearchableInfo(info);
    sv.setIconifiedByDefault(false);
    sv.setSubmitButtonEnabled(true);
    return true;
}

AndroidManifest.xml 中的设置活动

<activity
        android:name=".Settings"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

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

AndroidManifest.xml 中的可搜索活动

 <activity
        android:name=".ImageSearch"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
    </activity>

我的菜单 xml 文件中有标题 &lt;?xml version="1.0" encoding="utf-8"?&gt;,我尝试清理项目。他们似乎都没有成功。

【问题讨论】:

标签: android searchable searchview oncreateoptionsmenu


【解决方案1】:

好吧,没关系。 经过一番研究,我发现用于创建搜索界面的 android 文档并不完整:有些东西被遗漏了,例如

1) 可搜索配置中不应硬编码字符串

2) 我应该在进行搜索的&lt;activity&gt; 中有此代码:

 <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/your search configuration file's name" />

3) 我还应该在&lt;activity&gt; 中有此代码,我希望SearchView 出现在ActionBar

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

为了完整起见:这是我的清单文件:

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="false"
        android:theme="@style/AppTheme">
    <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data
                android:name="android.app.default_searchable"
                android:value=".SearchActivity" />
    </activity>
    <activity android:name=".SearchActivity"
            android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
                android:resource="@xml/searchable"/>
    </activity>
</application>

【讨论】:

  • 不幸的是,它仍然对我不起作用。我的可搜索活动根本没有被解雇!
  • 如果我想让搜索按钮在每个活动中都可用,我应该将哪个活动指定为".ActivityWhichCarriesOutTheSearch"
【解决方案2】:

当我没有执行搜索的活动时,我使用 android:launchMode="singleTop" 属性。元数据如下所示:

<activity android:name=".Activities.Account" android:label="Личный кабинет абонента"
          android:screenOrientation="portrait"
          android:launchMode="singleTop"
        >
    <meta-data android:name="android.app.searchable"
               android:resource="@xml/searchable"/>
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
</activity>

【讨论】:

    【解决方案3】:

    如果您在 ma​​inactivtity 中扩展 ActionBarActivity,则必须在 menu_item 中将 searchview 类型转换为

    "android.support.v7.widget.SearchView"
    

    我也遇到了同样的错误,我解决了:谢谢....

    <item android:id="@+id/search"
    android:title="Search for coupons,deals,stores,etc....."
    android:icon="@drawable/ic_search"
    app:showAsAction="always"
    app:actionViewClass="android.support.v7.widget.SearchView" />
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2015-11-08
    • 2016-02-13
    • 2019-10-13
    • 1970-01-01
    相关资源
    最近更新 更多