android - 如何从 Kotlin 的 SearchView 中正确检索数据?
问题描述
我正在做一个我想使用搜索栏的个人项目。我一直在检查其他帖子的问题,但我仍然不明白发生了什么。
我知道“searchView”没有被引用,但我不知道该放什么......每次我使用“searchView”时,android studio都会告诉我:“Unsolved References”
//retrieve search query
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.my_menu, menu)
val searchItem = menu.findItem(R.id.app_bar_search)
searchView = searchItem.actionView as SearchView
searchView.setQueryHint("Search View Hint")
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: String): Boolean {
return false
}
override fun onQueryTextSubmit(query: String): Boolean {
// task HERE
//on submit send entire query
return false
}
})
return true
}
这是我的菜单xml:
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/app_bar_search"
android:icon="@drawable/ic_search_black_24dp"
android:title="Search"
app:showAsAction="always"
app:actionViewClass="android.widget.SearchView"/>
</menu>
这里是工具栏xml:
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbarHome"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
有什么事情尽管问我。
解决方案
您需要将您的 searchView 定义为 val: val searchView = searchItem.actionView as SearchView
。我删除了 style.xml 中的默认工具栏以使用您的工具栏(请参阅 onCreate 方法)。使用此代码,我可以编译并在搜索栏中键入一些文本。
活动.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbarHome)
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.my_menu, menu)
val searchItem = menu.findItem(R.id.app_bar_search)
val searchView = searchItem.actionView as SearchView
searchView.queryHint = "Search View Hint"
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextChange(newText: String): Boolean {
return false
}
override fun onQueryTextSubmit(query: String): Boolean {
// task HERE
//on submit send entire query
return false
}
})
return true
}
my_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/app_bar_search"
android:title="Search"
app:showAsAction="always"
app:actionViewClass="androidx.appcompat.widget.SearchView"/>
</menu>
工具栏
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbarHome"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
样式.xml
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
</style>
</resources>
推荐阅读
- algorithm - 反向 0/1 背包:表中的这一行怎么可能?
- reactjs - React - 转换字符串以使用导入的组件
- javascript - 关于 JavaScript 对象的方法不可枚举的困惑
- sql - 在 spark sql 中使用正则表达式定位函数
- javascript - 如何将此 python 代码嵌入到一个简单的 HTML 网站中?
- r - 使用带有闪亮和情节的 str_wrap 自定义 HTML 标签
- swiftui - 在通知观察者中找不到类型为 XXX 的 ObservableObject
- request - 使用邮递员请求按文件夹恢复 Vsphere VM?
- c# - 智能卡上的内存如何工作以及如何访问数字行驶记录卡的唯一 ID
- c++ - 在 using 语句中指定“枚举” - 它有什么不同吗?