Setting学习(八)-搜索框(搜索过程)

从前面已经知道搜索界面的布局是线性布局,上面是一个searchview,而下面是一个recycleview显示搜索的结果,在搜索过程中,会从数据库里匹配,点击筛选结果,根据ClassName启动对应的界面:
\packages\apps\settings\src\com\android\settings\search\SearchFragment.java
onCreate()方法:
在这里插入图片描述
onCreate()方法中,给搜索结果显示的recycleview初始化了适配器SearchResultsAdapter
onCreateView()
方法:
在这里插入图片描述
从方法中可以看到,在里面初始化了搜索结果列表ResultsRecyclerView,并与Adapter进行了绑定,如果是没有搜索结果的话就显示mNoResultsView,同时也获取了SearchView控件。并设置了搜索框内容的变化的监听,处理文本监听的是onQueryTextChange方法,每次内容的变化,都会让他重新进行搜素,里面的数据加载都通LoaderManager。
下面就来看看搜索数据的适配器SearchResultsAdapter
\packages\apps\settings\src\com\android\settings\search\SearchResultsAdapter.java
在这里插入图片描述
里面是一些需要的参数变量和结果集,再看和Adapter相关的viewHolder:
在这里插入图片描述
可以看到在createViewHolder中根据不同的type创建了不同的ViewHolder,前面三个创建时同一个ViewHolder“"IntentSearchViewHolder”,最后一个创建的是“SavedQueryViewHolder”
这就将搜索结果和搜索历史区分开来,历史记录的type就是“SAVED_QUERY”;
下面来看看IntentSearchViewHolder:
\packages\apps\settings\src\com\android\settings\search\IntentSearchViewHolder.java
在这里面主要是重写 onBind方法:
在这里插入图片描述
可以看到首先调用了父类的onBind()方法,这里为每一个搜索结果候选项设置了点击事件,先调用了SearchFragmentfragment.onSearchResultClicked(this, result)方法,然后启动了对应activity的intent,调用了fragment.startActivity(intent);实现页面的跳转,下面再来看看fragment.onSearchResultClicked(this, result)方法:
在这里插入图片描述
在这里对数据库进行了一下操作。SavedQueryController.java类也在这个目录下,里面对数据的操作都是用LoaderManager
下面看一下Type为历史记录时对应的ViewHolder
\packages\apps\settings\src\com\android\settings\search\SavedQueryViewHolder.java
在这里插入图片描述
这里也主要是重写了一下onBind()方法,主要就是设置了一下title,调用了SearchFragmentonSavedQueryClicked方法:
在这里插入图片描述
这里的作用相当于点击的历史记录项添加到搜索框中,因为SearchView设置了文本变化的监听,它就会调用onQueryTextChange()方法,这使得它会跳转到要搜索的那个结果列表.。
最后再来看看这个viewHolder的父类SearchViewHolder
\packages\apps\settings\src\com\android\settings\search\SearchViewHolder.java
在这里插入图片描述
在这里插入图片描述
在这里面调用了bindBreadcrumbView()方法,从图中可以看到它设置的是这个搜索项在Settings中对应的打开路径,方法就不贴了。
从图中可以看到左边icon的位置是空白的,因为icon的值很多都是无效的为null,从上面代码的注释中也可以看到有考虑到icon无效的情况。在这里的显示路径的部分,不是Settings中常见的Preference控件中的summary,虽然在代码中有设置,有些是通过summary设置的,但是这里在很多时候summary的值也是空的。

参考:https://blog.csdn.net/qq_34149526/article/details/83414364

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值