在Android 5.0中使用AppCompat的SearchView上的NullPointerException

前端之家收集整理的这篇文章主要介绍了在Android 5.0中使用AppCompat的SearchView上的NullPointerException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用所有AppCompat主题更新我的应用程序.我在这里得到一个nullpointer:
  1. @Override
  2. public boolean onCreateOptionsMenu(Menu menu) {
  3. MenuInflater inflater = getMenuInflater();
  4. inflater.inflate(R.menu.menu,menu);
  5. MenuItem searchItem = menu.findItem(R.id.menu_search);
  6. SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
  7.  
  8. setupNewSearchView(searchItem,searchManager);
  9.  
  10. return true;
  11. }
  12.  
  13. private void setupNewSearchView(final MenuItem searchItem,SearchManager searchManager) {
  14. final SearchView searchView = (SearchView) searchItem.getActionView();
  15.  
  16. // Null at line below
  17. searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
  18.  
  19. // Everything else below edited out
  20. }

这是我的主要进口:

  1. import android.support.v7.app.ActionBar;
  2. import android.support.v7.app.ActionBarActivity;
  3. import android.support.v7.widget.SearchView;

我认为更新到AppCompat时,这一行必须更改吗?

  1. final SearchView searchView = (SearchView) searchItem.getActionView();

更新:

我把它改成了这个

  1. final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);

具有相同的空结果…

更新 – 添加XML

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <menu
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. xmlns:app="http://schemas.android.com/apk/res-auto" >
  5.  
  6. <item
  7. android:id="@+id/menu_search"
  8. app:actionViewClass="android.support.v7.widget.SearchView"
  9. android:icon="@android:drawable/ic_menu_search"
  10. app:showAsAction="always"
  11. android:title="search" />
  12. <item
  13.  
  14. </menu>

logcat的:

  1. 10-24 11:49:07.040: E/AndroidRuntime(4846): java.lang.NullPointerException
  2. 10-24 11:49:07.040: E/AndroidRuntime(4846): at com.---.---.MainFragmentActivity.setupNewSearchView(MainFragmentActivity.java:1300)
  3. 10-24 11:49:07.040: E/AndroidRuntime(4846): at com.---.---.MainFragmentActivity.onCreateOptionsMenu(MainFragmentActivity.java:1292)
  4. 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.app.Activity.onCreatePanelMenu(Activity.java:2538)
  5. 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:275)
  6. 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276)
  7. 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79)
  8. 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:1056)
  9. 10-24 11:49:07.040: E/AndroidRuntime(4846): at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1259)

解决方法

使用支持库,您必须使用一个特殊的菜单项类:MenuItemCompat.
  1. android.support.v4.view.MenuItemCompat

方法名称(getActionView)保持不变.

您的菜单xml应如下所示:

  1. <menu
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto" >
  4. <item
  5. android:id="@+id/action_search"
  6. android:icon="@android:drawable/ic_menu_search"
  7. app:showAsAction="always"
  8. app:actionViewClass="android.support.v7.widget.SearchView"
  9. android:title="Search"/>
  10. </menu>

猜你在找的Android相关文章