搜索数据库中的项目并显示下拉列表

时间:2013-08-19 23:10:47

标签: android android-sqlite android-search

我有以下应用程序架构(为简化而推广):

主要Layout包含ActionBar,其中包含自定义View和可滚动Tabs,以及ViewPager托管多个ListFragments。每个ListFragment都有自己的数据集(1行= ImageView + TextView),这些数据是从SQLite数据库加载的。在我的ActionBar's自定义View中,您有一个“搜索”EditText

当用户开始输入内容时,我想在数据库中执行“移动中”搜索,并以下拉列表的形式显示匹配的名称(这些名称应该是可点击的)。我看到了一些如何在ListView中执行搜索的示例,但没有与数据库搜索相关的内容。

所以问题是:如何将数据库搜索结果显示为下拉列表,并在用户添加或删除字符时随时刷新它?

3 个答案:

答案 0 :(得分:9)

您需要实施AutoCompleteTextView。这允许在用户键入时提供建议。您可以使用Adapters绑定要搜索的数据。

这可以解决您的问题。

可以找到可能有用的示例here

答案 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