kotlin.TypeCastException:无法将null强制转换为非null类型的android.widget.SearchView

时间:2019-02-05 22:41:02

标签: android kotlin searchview

我想学习如何在应用程序中实现SearchView,因此我创建了一个新的Android项目并遵循google documentation

所以我已经完成了以下步骤: 1-我在AndroidManifest中添加了意图过滤器和元数据,并在xml目录中创建了可搜索的配置

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
            android:hint="search hint"
            android:label="@string/app_name"> 
</searchable>

2-创建带有所需图标的菜单文件:

<?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/searchIcon"
          android:title="search"
          android:icon="@drawable/ic_search_white_24dp"
          app:showAsAction="always"
    />
</menu>

在MainActivity中,我试图给菜单充气,并尝试在Click上显示searchView。

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.menu, menu)

        val searchmanager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
        (menu?.findItem(R.id.searchIcon)?.actionView as SearchView).apply {
            setSearchableInfo(searchmanager.getSearchableInfo(componentName))
        }

        return true
    }

但是当我运行该应用程序时,出现此错误。

kotlin.TypeCastException: null cannot be cast to non-null type android.widget.SearchView
        at com.example.MainActivity.onCreateOptionsMenu(MainActivity.kt:30)
        at android.app.Activity.onCreatePanelMenu(Activity.java:3373)
        at androidx.fragment.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:378)
        at androidx.appcompat.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:94)
        at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.onCreatePanelMenu(AppCompatDelegateImpl.java:2549)
        at androidx.appcompat.app.AppCompatDelegateImpl.preparePanel(AppCompatDelegateImpl.java:1589)
        at androidx.appcompat.app.AppCompatDelegateImpl.doInvalidatePanelMenu(AppCompatDelegateImpl.java:1869)
        at androidx.appcompat.app.AppCompatDelegateImpl$2.run(AppCompatDelegateImpl.java:230)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

我的Gradle(Module:app)中的依赖项

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
    implementation 'com.google.android.material:material:1.0.0-rc01'
    implementation 'androidx.core:core-ktx:1.1.0-alpha04'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
}

有人可以解释一下为什么会发生这种情况以及如何解决。

先谢谢您

0 个答案:

没有答案