在stackoverflow中尝试了关于这个问题的所有解决方案后,我决定在这里问一下。
我正在尝试在操作栏中实现搜索栏。 我正在使用 AppCompatActivity 并导入 android.support.v7.widget.SearchView 。
对于记录,如果有任何关联,我正在使用PageManager和TabLayout。
我在以下行中收到java.lang.NullPointerException错误:
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
这是我的代码:
menu_main.xml
中的搜索栏declration<item
android:id="@+id/searchPlace"
android:title="@string/search_hint"
android:actionViewClass="android.support.v7.widget.SearchView"
android:showAsAction="always"/>
searchable.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" />
的AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<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=".searchResultActivity" />
</activity>
<activity
android:name=".Settings"
android:label="@string/title_activity_settings" >
</activity>
<activity
android:name=".searchResultActivity"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<!-- to identify this activity as "searchable" -->
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
在我的 MainActivity.java onCreateOptionsMenu中搜索代码:
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.searchPlace).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
Logcat错误:
Process: il.co.test.test, PID: 1642
java.lang.NullPointerException
at il.co.test.test.MainActivity.onCreateOptionsMenu(MainActivity.java:106)
at android.app.Activity.onCreatePanelMenu(Activity.java:2538)
at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:262)
at android.support.v7.internal.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:267)
at android.support.v7.internal.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85)
at android.support.v7.internal.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:448)
at android.support.v7.internal.app.ToolbarActionBar$1.run(ToolbarActionBar.java:65)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
更新
我不确定,我不知道怎么检查它 - 但我很确定我的 getActionVIew()会返回 NULL 。
更新2 - 固定!
在检查了一些关于getActionView()null问题的stackoverflow之后, getActionView() of my MenuItem return null的第二个答案解决了我的问题。 我不得不使用 android 的名称空间 app 安装程序。
非常痛苦!
希望有人能找到我的错误并帮我修复它,因为我尝试了6个小时的许多解决方案。
提前致谢!
答案 0 :(得分:1)
搜索菜单项
<item
android:id="@+id/searchPlace"
android:title="@string/search_hint"
android:actionViewClass="android.support.v7.widget.SearchView"
android:title="@string/search"
app:showAsAction="always|collapseActionView"/>
活动代码
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.your_menu, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.searchPlace).getActionView();
searchView.setOnQueryTextListener(queryTextListener);
return true;
}
private OnQueryTextListener queryTextListener = new OnQueryTextListener()
{
@Override
public boolean onQueryTextSubmit(String query) {
//if you need this
return false;
}
@Override
public boolean onQueryTextChange(String query) {
//your code
return true;
}
};
在这种情况下,您不需要可搜索的配置,不需要清单中的笔画,不需要SearchManager和其他东西。只需在菜单中声明搜索项即可。
答案 1 :(得分:0)
在检查了一些关于getActionView()null问题的stackoverflow之后, getActionView() of my MenuItem return null的第二个答案解决了我的问题。 我不得不使用 android 的名称空间 app 安装程序。
非常痛苦!