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

我也是按照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()));
才能够正常起作用。



你可能感兴趣的:(android,searchView)