kotlin.TypeCastException: ноль не может быть приведен к непустому типу - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь инициализировать пользовательский инструмент поиска (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
    }

Logcat message

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>

Ответы [ 3 ]

1 голос
/ 08 марта 2019

Эта строка вызывает сбой вашего приложения

global_search = searchItem.actionView as MaterialSearchBar

Поскольку searchItem.actionView всегда возвращает null, а тип global_search равен MaterialSearchBar (ненулевой тип). Вы присваиваете 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
}

Но представление поиска не отображается в вашем приложении, кажется, что сторонняя организация не поддерживает интеграцию в элемент меню с помощью app:actionViewClass.

Вот обходное решение, которое вы можете попробовать.

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

0 голосов
/ 07 марта 2019

, если это не поможет global_search= searchItem.actionView as? MaterialSearchBar

global_search вероятно объявлено как Nullable

Убедитесь, что это var global_search: MaterialSearchBar? = null

0 голосов
/ 07 марта 2019

Скорее всего, ваш член actionView имеет значение null, и вы можете использовать:

global_search= searchItem.actionView as MaterialSearchBar?

или по определению что-то вроде этого:

var global_search:MaterialSearchBar?= searchItem.actionView 

PS. Было бы полезно, если бы вы показали, как был определен global_search

...