【问题标题】:Getting null after migrating android X androidx.appcompat.widget.SearchView迁移 android X androidx.appcompat.widget.SearchView 后获取 null
【发布时间】:2020-02-13 10:46:52
【问题描述】:

我在xml中添加了android X

 public boolean onCreateOptionsMenu(final Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.notebook_menu, menu);
    MenuItem searchMenuItem = menu.findItem(R.id.notebook_search);      
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    searchView = (SearchView) searchMenuItem.getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);    
    }

从菜单

  <menu xmlns:android="http://schemas.android.com/apk/res/android" >
        <item
        android:id="@+id/notebook_search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        android:icon="@drawable/tab_notebook_search"
        app:showAsAction="always|collapseActionView"
        android:title="@string/search"/>
        </menu>

错误

java.lang.NullPointerException: 尝试调用虚方法 'void android.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)' 在空对象引用上

【问题讨论】:

  • 请提供minimal reproducible example。请务必显示完整的错误消息。查看stackoverflow.com/questions/23353173/… 获取一些提示。
  • menu.xml 文件 android:actionViewClass="androidx.appcompat.widget.SearchView" Java class searchView = (SearchView) searchMenuItem.getActionView();//getting null here Error java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.SearchView.setSearchableInfo(android.app.SearchableInfo)”
  • 您阅读我提供的链接了吗?

标签: android android-layout android-fragments


【解决方案1】:

在您的菜单布局中使用app:actionViewClass 而不是android:actionViewClass。那就是问题所在。如下更改:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/notebook_search"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        android:icon="@drawable/tab_notebook_search"
        app:showAsAction="always|collapseActionView"
        android:title="@string/search"/>
</menu>

除此之外,您的重构可能没有正确完成。请尝试 Refactor > Migrate to AndroidX 并按 DoRefactor

【讨论】:

  • 我都添加了,但我仍然得到空指针异常 import androidx.appcompat.widget.SearchView; android:actionViewClass="androidx.appcompat.widget.SearchView"
  • 还有问题吗?请发布您的 onCreateOptionMenu 代码和菜单布局
  • 我已经添加了完整的细节。请检查并让我知道是否有任何解决方案。谢谢
  • 使用app:actionViewClass
  • 要使用 AndroidX,您应该遵循正确的重构方法。请这样做:尝试 Refactor > Migrate to AndroidX 并按 DoRefactor
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2022-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
相关资源
最近更新 更多