【发布时间】:2017-12-10 19:28:02
【问题描述】:
我想在用户输入搜索查询时打开SearchResultsActivity,但我一直试图在过去 1 天的活动中设置搜索视图,但没有成功。我看过很多 stackoverflow 问题和教程。这些解决方案都不适合我。
我在AndroidManifest 的application 标签中有这个
<meta-data
android:name="android.app.default_searchable"
android:value="<package>.search.SearchResultsActivity" />
这是我在清单中声明的SearchResultsActivity
<activity
android:name="search.SearchResultsActivity"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.SEARCH"/>
</intent-filter>
<meta-data
android:name="android.appcompat.searchable"
android:resource="@xml/searchable"/>
</activity>
可搜索的 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_hint" />
这是我想要此搜索视图的活动
<activity
android:name=".goods.GoodsActivity"
android:screenOrientation="portrait"/>
在选项中创建所述活动的菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.base_menu, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.search));
ComponentName cn = new ComponentName(this, SearchResultsActivity.class);
searchView.setSearchableInfo(searchManager.getSearchableInfo(cn));
return true;
}
我经常因为这段代码而崩溃
java.lang.NullPointerException: Attempt to read from field 'android.os.Bundle android.content.pm.PackageItemInfo.metaData' on a null object reference
at android.os.Parcel.readException(Parcel.java:1605)
at android.os.Parcel.readException(Parcel.java:1552)
at android.app.ISearchManager$Stub$Proxy.getSearchableInfo(ISearchManager.java:177)
at android.app.SearchManager.getSearchableInfo(SearchManager.java:851)
at <package>.BaseActivity.onCreateOptionsMenu(BaseActivity.java:83)
at android.app.Activity.onCreatePanelMenu(Activity.java:2846)
at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:362)
at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:98)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:335)
at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:98)
at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:454)
at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:61)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
【问题讨论】:
-
你需要
setSearchableInfo做什么? -
@pskink 我不完全确定。我在我查找的大多数地方都看到了它。这是开始
SearchResultsActivity我猜 -
那么你到底想达到什么目的呢?
-
每次用户从我的源活动@pskink 按下键盘上的搜索按钮时,我都想打开
SearchResultsActivity -
键盘上的搜索按钮?软键盘?
标签: android searchview android-search android-searchmanager