不管是在主页面,还是在体系界面,都存在查询功能,根据输入的关键字搜索,在之前的博客中,有使用到SearchView,但是具体的逻辑功能还没有实现,现在来实现一下功能。
1、输入作者,查询作者的文章。
SearchView
有一个监听器是setOnQueryTextListener
,有两个重写方法,分别是onQueryTextSubmit
和onQueryTextChange
,当手机键盘点击搜索时,回调的是onQueryTextSubmit
方法,当删除输入值,重新输入时,回调的是onQueryTextChange
,但是执行搜索的还是第一个方法,测试一下:
sv_search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
//响应键盘的确认按钮 query是输入的值
Log.e("TAG","执行搜索的值是===="+query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
//当搜索关键字修改时,回调这个方法 newText就是新的关键字
Log.e("TAG","当前修改的搜索值是===="+newText);
return false;
}
});
2020-02-15 20:36:00.126 31128-31128/com.example.wanandroid E/TAG: 当前修改的搜索值是====Android
2020-02-15 20:36:00.594 31128-31128/com.example.wanandroid E/TAG: 执行搜索的值是====Android
所以只需要在onQueryTextSubmit
进行数据请求就行。
@Override
public boolean onQueryTextSubmit(String query) {
//响应键盘的确认按钮 query是输入的值
mPresenter.getArticleByAuthor(0,query);
Log.e("TAG","执行搜索的值是===="+query);
return false;
}
使用我们之前设置的一个RecyclerView适配器,将数据显示出来。
@Override
public void showResult(List<SystemArticleBean.DataBean.DatasBean> datas) {
//之前的页面不再显示
ll_search.setVisibility(View.GONE);
tv_hot.setVisibility(View.GONE);
tv_url.setVisibility(View.GONE);
fl_url.setVisibility(View.GONE);
fl_search.setVisibility(View.GONE);
sysAdapter = new SystemArticleAdapter(this,datas);
sysAdapter.setOnItemClickListener(new SystemArticleAdapter.onItemClickListener() {
@Override
public void onClick(int position) {
String link = datas.get(position).getLink();
loadUrl(link);
}
});
rv_search.setLayoutManager(new GridLayoutManager(this,GridLayoutManager.VERTICAL));
rv_search.setAdapter(sysAdapter);
//设置边距
rv_search.addItemDecoration(new RvItemDistance(RvItemDistance.px2dp(8)));
}
看效果: