我想学习如何在应用程序中实现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'
}
有人可以解释一下为什么会发生这种情况以及如何解决。
先谢谢您