Я хотел узнать, как реализовать SearchView в приложении, поэтому я создал новый Android-проект и следовал документации Google для этого.
, поэтому я уже сделал эти шаги: 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 я пытался раздуть меню и попытаться показать 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 (Модуль: приложение)
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'
}
Может кто-нибудь объяснить, пожалуйста, почему это происходит и как это исправить.
спасибо взаранее