我有以下应用程序架构(为简化而推广):
主要Layout
包含ActionBar
,其中包含自定义View
和可滚动Tabs
,以及ViewPager
托管多个ListFragments
。每个ListFragment
都有自己的数据集(1行= ImageView
+ TextView
),这些数据是从SQLite数据库加载的。在我的ActionBar's
自定义View
中,您有一个“搜索”EditText
。
当用户开始输入内容时,我想在数据库中执行“移动中”搜索,并以下拉列表的形式显示匹配的名称(这些名称应该是可点击的)。我看到了一些如何在ListView
中执行搜索的示例,但没有与数据库搜索相关的内容。
所以问题是:如何将数据库搜索结果显示为下拉列表,并在用户添加或删除字符时随时刷新它?
答案 0 :(得分:9)
答案 1 :(得分:4)
您可以实现OnQueryTextListener()
接口并覆盖onQueryTextChange(String text)
方法 - 在角色更改时调用此方法。像
searchTextInstance.setOnQueryTextListener(new CustomQueryListener());
在onQueryTextChange(Sting text)
内查询您的数据库,然后调用
CustomAdapter adapter = new CustomAdapter()
//... populate the adapter with the query results and call
searchTextInstance.setSuggestionAdapter(adapter)
其中CustomAdapter是一个扩展SimpleCursorAdapter的类,此实例由查询结果填充(结果将显示在下拉菜单中)。
要使选择可单击,您可以将自定义OnSuggestionListener()设置为searchTextInstance
,即
searchTextInstance.setOnSuggestionListener(new CustomSuggestionListener());
其中CustomSuggestionListener
实现OnSuggestoinListener
- 界面的唯一方法,onSuggestionClick(int postion)
将实现您的目标
答案 2 :(得分:0)
要在下拉列表中查看搜索结果,可以使用 PopupWindow
我得到搜索结果后在房间数据库中实现它
从数据库中获取数据
private fun setupPopupWindow(listOfCustomer: ArrayList<LocalCustomer>) {
val inflater = this.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val layout = inflater.inflate(R.layout.spinner_list, null)
val popupWindow =
PopupWindow(layout, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true)
popupWindow.showAsDropDown(svSearch, 0, 0)
val locationAdapter = CustomerAdapter(context, listOfCustomer)
val listView = layout.findViewById(R.id.lvMenu) as ListView
listView.adapter = locationAdapter
listView.onItemClickListener = AdapterView.OnItemClickListener { adapterView,
view, position, id ->
popupWindow.dismiss()
}
}
设置弹出窗口
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/text_vvvvlight_gry"
android:orientation="vertical">
<ListView
android:id="@+id/lvMenu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="4dp"/>
</LinearLayout>
spinner_list
svSearch.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(p0: String?): Boolean {
return true
}
override fun onQueryTextChange(param: String?): Boolean {
if (param != null && param != "")
searchCustomer(param)
return true
}
})
SearchView
BaseColor.WHITE
CustomerAdapter 将是baseAdapter或您可以使用ArrayAdapter