RecyclerView+SearchView (简单实现)

RecyclerView+SearchView (简单实现)

简述: 简单实现点赞计数功能,按照个人想法实现文本检索功能,针对界面进行了美化。 (个人理解,有误指出)

检索功能实现思路:

控件导入:直接引入官方自带的SearchView控件,期间也是深受版本问题的困扰,如果导入控件使用androidx.appcompat.widget.SearchView报错,可以换成SearchView,(建议还是使用GUI界面拖动,版本问题是个诟病) 建议自己实现EditText。

简单思路:

(1)SearchView自带搜索图标和删除键,直接引入控件即可

(2) 实现搜索列表的即时显示,我们可以想一下,显示列表是根据数据创建一个adapter并设置显示,那么我们可以找到我们需要的数据,加入对应的List之中创建一个搜索结果的adapter,这样就能达到显示搜索结果的目的,即时性的实现采用监听器之中实现的onQueryTextChange方法,每搜索框改变一个字符便会回调该方法,每次调用该方法我们就创建一个新的adapter更新数据。

(3) 搜索文本匹配可以采用模拟匹配(小文本)或者 正则表达式匹配,但是两者的匹配标准不同(之后具体实现会提到) 。

(3) 每次找到对应的新数据之前先把原来储存用的LIst清空。

具体实现:

(1) 匹配所有的标签是否含有检索文本(搜索框的输入),我这里的子串的定义就是,按照先后顺序去掉若干个能得到目标串,这个串就称之为父串。比如:好久不见。 我们可以认定为是 “好不”的父串 ,简单来说,只要是按照顺序,能够找出每一个字符,我们就称之为父串。 实现方法:简单的正则表达式匹配 , 将输入的字符串拆分成单个字符 ,转化为正则表达式

诸如 : 字符1{1} + "[\s\S]" + 字符2{1} ,字符1{1} 代表字符1出现一次,"[\s\S]"代表匹配所有的字符(空或者非空)

这样的实现实际上就是为了贴合我们上面所说的子串理论,只要按照顺序出现一个字符1 。。。。。 字符2即可,中间出现的字符我们可以默认为任意,这样就可以用正则表达式完成文本匹配。

(2) 匹配的第二种实现,简单的模拟即可(实际上可以来个kmp),把搜索框的字符串进行拆分,去每一个标签之中寻找,每次都标记当前标签之中出现过的搜索框字符(bool数组标记即可),这样的匹配只要求出现过搜索框之中的所有字符就是合法的。 例子: 搜索框输入AS,对应的ASR在第一二种方法之中都会被匹配到 ,但是输入SA,只有第二种之中才会匹配到ASR。

不足 :按照个人理解实现的检索功能,效率过低,文本匹配的模式单一,而且无法实现光亮操作。

点赞计数实现

实现方法1. 采用图片切换的方法,首先获取一系列带数字的图片的id,设置一个计数器,然后将获取的id组成一个数组,针对对应计数器设置对应id的图片。

实现方法2. 相应的弄一个TextView,设置对应的监听器,点击一次计数器加一,设置的文本+1

(两种方法,方法二渲染时间少,占用空间少)


效果图:

(1) 正则表达式匹配 + 文本框进行更新计数

(2) 正则表达式匹配 + 图片切换计数

(3) 模拟匹配 + 图片切换计数

(4) 模拟匹配 + 文本框进行更新计数

框架图

采用的javaBean

package com.example.logindemo;

public class AlbumInfo {
    public String title;
    public String info;
    public int  imageId;
    public AlbumInfo(String title, String info, int imageId) {
        this.title = title;
        this.info = info;
        this.imageId = imageId;
    }
    public String getTitle() {
        return title;
    }
    public String getInfo() {
        return info;
    }
    public int  getImageId() {
        return imageId;
    }
}

Recycler_View.java (方法一,模拟实现)

package com.example.logindemo;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.OrientationHelper;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Recycler_View extends AppCompatActivity {

    private List<AlbumInfo> mData = new ArrayList<>();
    /// 储存原始的总数据
    private List<AlbumInfo> search_mData = new ArrayList<>();
    /// 搜索之后的更新数据
    private SearchView searchView;
    @Override
    protected void o
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值