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

来源:互联网 发布:java中long的长度 编辑:程序博客网 时间:2024/04/29 14:38

我也是按照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);    }@Overridepublic boolean onQueryTextSubmit(String str){// TODO Auto-generated method stubLogUnit.Log(TAG, "search submit:" + str);return false;//必须返回false 要不然SearchView认为你处理该提交。他不会再进行处理}@Overridepublic boolean onQueryTextChange(String str){// TODO Auto-generated method stubLogUnit.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()));
才能够正常起作用。



0 0