1

我正在尝试在菜单上初始化自定义搜索工具(3d 库),但出现错误。

这是我的代码

 override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.base_nav_drawer,menu)
      searchItem= menu?.findItem(R.id.srchbar_menu)!!
            global_search= searchItem.actionView as MaterialSearchBar
       lastsuggestions=ArrayList<String>()
        loadSuggest()
global_search.lastSuggestions=lastsuggestions
        return true
    }

日志猫消息

kotlin.TypeCastException: null cannot be cast to non-null type com.mancj.materialsearchbar.MaterialSearchBar
        at com.example.sg772.foodorder.BaseNavDrawerActivity.onCreateOptionsMenu(BaseNavDrawerActivity.kt:136)

我试过这个

 global_search= searchItem.actionView as? MaterialSearchBar

但它没有帮助第 136 行对应于global_search= searchItem.actionView as MaterialSearchBar

菜单的xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/srchbar_menu"
          android:title="search"
          android:icon="@drawable/ic_search_black_24dp"
          app:showAsAction="ifRoom|collapseActionView"
          app:actionViewClass="com.mancj.materialsearchbar.MaterialSearchBar"/>
</menu>
4

3 回答 3

1

此行使您的应用程序崩溃

global_search = searchItem.actionView as MaterialSearchBar

因为searchItem.actionView总是返回null并且global_search类型是MaterialSearchBar(非空类型)。您将 null 分配给非 null 类型,这就是您的应用程序崩溃的原因。

您可以将代码更改为

var global_search: MaterialSearchBar? = null

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.base_nav_drawer,menu)
    searchItem= menu?.findItem(R.id.srchbar_menu)!!
    global_search = searchItem.actionView as MaterialSearchBar?
    lastsuggestions=ArrayList<String>()
    loadSuggest()
    global_search.lastSuggestions=lastsuggestions
    return true
}

但是搜索视图没有显示在您的应用程序上,似乎第 3 方不支持通过使用集成到菜单项中app:actionViewClass

这是您可以尝试的解决方法。

https://github.com/mancj/MaterialSearchBar/issues/107

于 2019-03-08T03:18:01.857 回答
0

您的 actionView 成员很可能为 null,您可能希望使用:

global_search= searchItem.actionView as MaterialSearchBar?

或在定义中是这样的:

var global_search:MaterialSearchBar?= searchItem.actionView 

PS。如果您展示 global_search 是如何定义的,那将是有益的

于 2019-03-07T17:58:35.933 回答
0

如果这没有帮助 global_search= searchItem.actionView as? MaterialSearchBar

global_search可能被声明为 Non-Nullable

确保它是 var global_search: MaterialSearchBar? = null

于 2019-03-07T18:10:59.420 回答