Android工具栏上的搜索视图Null指针异常[SearchView searchView =(SearchView)getActionView(searchItem); ]

时间:2018-06-30 22:26:22

标签: android

错误 java.lang.NullPointerException:尝试在MainActivity.onCreateOptionsMenu上的空对象引用上调用接口方法'android.view.View android.view.MenuItem.getActionView()'

工具栏上的搜索视图代码

Java

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    SearchManager searchManager = (SearchManager) 
    getSystemService(Context.SEARCH_SERVICE);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) getActionView(searchItem);
    ComponentName componentName = new 
    ComponentName(context,MainActivity.class); 
searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName));}

菜单

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/action_search"
    android:icon="@android:drawable/ic_menu_search"
    app:showAsAction="always|collapseActionView"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:title="Search" />

XML

   <?xml version="1.0" encoding="utf-8"?>
<searchable
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_name"
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    />

1 个答案:

答案 0 :(得分:0)

  • 将此行添加到ProGuard文件

    -keep class android.support.v7.widget.SearchView { *; }
    -keep interface android.support.** { *; }
    
  • 将此行SearchView searchView = (SearchView) getActionView(searchItem);替换为

    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    
  • Theme.AppCompat而不是Theme.Base.AppCompat

请查看上述步骤并提供反馈,以帮助您解决问题。