您的位置:首页 > 其它

关于com.actionbarsherlock.widget.SearchView的使用无法调用SearchActivity

2014-02-21 13:41 302 查看
我也是按照android 文档做的。

在res/xml下 新建searchable.xml

<?xml version="1.0" encoding="utf-8"?>
<searchable android:label="@string/app_name" android:hint="@string/search_hint"
android:searchSuggestAuthority="com.mengqi.base.provider"
android:searchSuggestPath="newsearch" android:searchSuggestSelection="word LIKE ?"
android:searchSuggestIntentAction="android.intent.action.VIEW"
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
android:searchSuggestThreshold="2" android:includeInGlobalSearch="true"
xmlns:android="http://schemas.android.com/apk/res/android" />


根据自己需求设置不同的属性。

然后在androidManifest.xml定义activity

<activity android:name=".SearchActivity"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable"/>
</activity>


然后在自己的TestActivity里面
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu)
{
getSupportMenuInflater().inflate(R.menu.search, menu);
SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setQueryHint(getString(R.string.search_hint));
searchView.setOnQueryTextListener(this);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onQueryTextSubmit(String str)
{
// TODO Auto-generated method stub
LogUnit.Log(TAG, "search submit:" + str);
return false;//必须返回false 要不然SearchView认为你处理该提交。他不会再进行处理
}

@Override
public boolean onQueryTextChange(String str)
{
// TODO Auto-generated method stub
LogUnit.Log(TAG, "text change:" + str);
return false;
}


res/menu 下面新建 search.xml

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:icon="@drawable/ic_action_search"
android:id="@id/menu_search"
android:orderInCategory="10"
android:title="@string/search"
android:actionViewClass="com.actionbarsherlock.widget.SearchView"
android:showAsAction="ifRoom|collapseActionView" />
</menu>


这样子发现,在搜索框中确定搜索的时候不弹出。

研究才发现在TestActivity中
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
设置进去的SearchableInfo是空的。

我就新建一个

searchView.setSearchableInfo(searchManager.getSearchableInfo(new ComponentName(this, SearchActivity.class)));
这样子就能够正常运行了。

但是实例都没有这样。为什么就是我的
searchManager.getSearchableInfo(getComponentName())
得到的是空值。所以认真寻找 才发现在

androidManifest.xml中还有定义

<meta-data android:name="android.app.default_searchable"
android:value=".SearchActivity" />
这样子,
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
才能够正常起作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐