android历史记录的搜索页

2023-10-30

// 保存搜索记录
public void saveSearchHistory(String inputText) {
SharedPreferences sp = WDApplication.getContext().getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
if (TextUtils.isEmpty(inputText)) {
return;
}
//获取之前保存的历史记录
longHistory = sp.getString(SEARCH_HISTORY, “”);
String[] tmpHistory = longHistory.split(","); //逗号截取 保存在数组中
//将改数组转换成ArrayList
historyList = new ArrayList(Arrays.asList(tmpHistory));
SharedPreferences.Editor editor = sp.edit();
if (historyList.size() > 0) {
isFlag=false;
//1.移除之前重复添加的元素
for (int i = 0; i < historyList.size(); i++) {
if (inputText.equals(historyList.get(i))) {
isSameIndex = i;
isFlag = true;
demoFlow.removeViewAt(isSameIndex);
historyList.remove(isSameIndex);
break;
}
}

        if (historyList.size() > 10) {
            historyList.remove(historyList.size() - 1); //3.最多保存10条搜索记录 删除最早搜索的那一项
            demoFlow.removeViewAt(historyList.size() - 1);
        }
        historyList.add(0, inputText); //将新输入的文字添加集合的第0位也就是最前面(2.倒序)
        //逗号拼接
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < historyList.size(); i++) {
            sb.append(historyList.get(i) + ",");
        }
        //保存到sp
        editor.putString(SEARCH_HISTORY, sb.toString());
        editor.commit();
    } else {
        //之前未添加过
        editor.putString(SEARCH_HISTORY, inputText + ",");
        editor.commit();
    }
    addChildView();
}

//添加View
public void addChildView() {
//清空之前添加的控件
ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
//设置外边距
lp.leftMargin = (int) getResources().getDimension(R.dimen.dp_5);
lp.rightMargin = (int) getResources().getDimension(R.dimen.dp_5);
lp.topMargin = (int) getResources().getDimension(R.dimen.dp_5);
lp.bottomMargin = (int) getResources().getDimension(R.dimen.dp_5);

    view = new TextView(this);
    view.setText(s);
    view.setTextColor(Color.BLACK);
    //设置内边距
    view.setPadding((int) getResources().getDimension(R.dimen.dp_10), (int) getResources().getDimension(R.dimen.dp_5), (int) getResources().getDimension(R.dimen.dp_10), (int) getResources().getDimension(R.dimen.dp_5));
    view.setBackgroundResource(R.drawable.select_raius);

    List<String> searchHistory = getSearchHistory();
    //相同的数据处理
    if (isFlag) {
        if (isSameIndex == -1) {
            return;
        } else {
            demoFlow.addView(view, 0, lp);

        }
    } else {
        if (demoFlow.getChildCount()<6) {
            demoFlow.addView(view, 0, lp);
        }else {
            demoFlow.addView(view, 0, lp);
            demoFlow.removeViewAt(demoFlow.getChildCount()-1);
        }
    }

    initListener();
}

  private void initListener() {
    final List<String> searchHistory = getSearchHistory();
    for (int i = 0; i < demoFlow.getChildCount(); i++) {
        //设置每个View的点击事件
        final int finalI = i;//由于OnClick里面拿不到i,所以需要重新赋值给一个final对象

        view.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.O)
            @Override
            public void onClick(View v) {
                search_edit.setText("");
                search_edit.setText(searchHistory.get(finalI));
            }
        });
        view.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                UIUtils.showToastSafe("删除我");
                return false;
            }
        });

    }
}
//
 private void initData() {
    searchHistory = getSearchHistory();
    ViewGroup.MarginLayoutParams lp = new ViewGroup.MarginLayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    //设置外边距
    lp.leftMargin = (int) getResources().getDimension(R.dimen.dp_5);
    lp.rightMargin = (int) getResources().getDimension(R.dimen.dp_5);
    lp.topMargin = (int) getResources().getDimension(R.dimen.dp_5);
    lp.bottomMargin = (int) getResources().getDimension(R.dimen.dp_5);
    if (searchHistory.size()>6) {
       searchHistory.remove(6);
    }

    for (int i = 0; i < searchHistory.size(); i++) {
        view = new TextView(this);
        view.setText(searchHistory.get(i));
        view.setTextColor(Color.BLACK);
        //设置内边距
        view.setPadding((int) getResources().getDimension(R.dimen.dp_10), (int) getResources().getDimension(R.dimen.dp_5), (int) getResources().getDimension(R.dimen.dp_10), (int) getResources().getDimension(R.dimen.dp_5));
        view.setBackgroundResource(R.drawable.select_raius);
        //设置每个View的点击事件
        final int finalI = i;//由于OnClick里面拿不到i,所以需要重新赋值给一个final对象

        view.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.O)
            @Override
            public void onClick(View v) {
                search_edit.setText("");
                search_edit.setText(searchHistory.get(finalI));
            }
        });
        demoFlow.addView(view, lp);
    }


    findViewById(R.id.delete).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            delete();
        }
    });

    findViewById(R.id.search_text).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setSearch_text();
        }
    });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android历史记录的搜索页 的相关文章

  • SpringCloud微服务项目快速搭建(SpringCloud Alibaba)

    一 概述 Spring Cloud Alibaba 是 Spring Cloud 和 Alibaba 面向微服务架构的一站式解决方案 为 Spring Cloud 生态中的各个组件提供了与 Alibaba 中间件的衔接 更方便 更易用的快速
  • Kali镜像下载

    http old kali org kali images 太全了 爱了爱了 存档
  • go语言实现NFT

    此文章以及链码 合约 均为原创 已通过以heco nft记录为NFT资产 HecoInfo Transaction Hash Txhash Details HecoInfo 请勿转载 如有兴趣 可扫描文章最后的二维码 基于erc721的以太
  • linux 硬盘分区,分区,删除分区,格式化,挂载,卸载笔记

    linux 虽然一直都有在玩 但是对硬盘操作确实不是很熟悉今天有空 就整理了下 1 创建分区 先查看下是否有磁盘没有分区 html view plain copy fdisk l 其中第一个框和第二个框 是已经分好区的磁盘 第三个硬盘没有分
  • 深入jvm虚拟机第4版_深入JVM虚拟机,阿里架构师直言,这份文档真的是JVM最深解读...

    作为一名优秀的 Java 开发程序员 以及想那些想要学习 Java 更深层一点的知识的同学 对 JVM 的熟悉与熟练使用是必不可缺的核心技能了 也是每个 Java 程序员应该要做到的 深入学习 JVM 可以有助于我们掌握 Java 应用程序
  • 推荐一款提高工作效率的屏幕扩展软件—Splashtop Wired XDisplay

    一 导读 使用Splashtop Wired XDisplay让闲置的手机平板成为电脑的第二块屏幕Splashtop Wired XDisplay 好文章 记得 收藏 点赞 关注 如果你和我一样抱怨着显示器太小 Idea编程软件占用了太多工
  • 03 ZooKeeper底层原理剖析与命令实战

    文章目录 03 ZooKeeper底层原理剖析与命令实战 1 Znode数据结构 1 1 目录结构 1 2 节点类型 2 ZK客户端命令行操作 3 ZooKeeper会话 4 事件监听机制原理剖析 5 广播模式剖析 6 ZooKeeper集
  • vs报错:TRACKER : 错误 TRK0005: 未能找到: “CL.exe”。系统找不到指定的文件

    平台 win 10 错误 如题 解决 1 参考 Windows11下配置Visual Studio2022 环境变量 Windows下配置Visual Studio 通用 2 1 运行 C Program Files Microsoft V
  • java定义一个类_Java类的定义格式:Java如何定义一个类

    在面向对象的思想中 最核心的就是对象 为了在程序中创建对象 首先需要定义一个类 类是对象的抽象 它用于描述一组对象的共同特征和行为 例如人都有姓名 年龄 性别等特征 还有学习 工作 购物等行为 以面向对象的编程思想 就可以将某一类中共同的特
  • 图的深度优先搜索和广度优先搜索

    图的深度优先搜索算法 dfs 图的深度优先搜索算法是以一个顶点为起始点开始挖掘 一个分支挖掘完 再继续挖掘下一个分支 在实现上需要用到栈 因此 图的深度优先搜索算法有很多条路径 取决于哪个顶点最先入栈 实现思路 非递归 dfs可以用栈来进行
  • 解决QT中TCP传数据的困惑

    问题一 当传输数据过大时 readAll不能读完这一条完整的报文 报文格式如下 解决方法 针对此问题 可以通过一个全局变量 将多次读到的数据合并 问题二 粘包现象之多次write对应一次read 深入查看ReadyRead 信号的产生条件可
  • CNN笔记:通俗理解卷积神经网络

    通俗理解卷积神经网络 cs231n与5月dl班课程笔记 1 前言 2012年我在北京组织过8期machine learning读书会 那时 机器学习 非常火 很多人都对其抱有巨大的热情 当我2013年再次来到北京时 有一个词似乎比 机器学习
  • make编译出错Relocations in generic ELF (EM: 62)

    参考 编译出错Relocations in generic ELF EM 62 main o Relocations in generic ELF EM 62 错误信息是 通过查看文件 main o 发现ELF 64bit x86 64 在
  • ClickHouse副本同步及分布式DDL的原理

    相信了解大数据的小伙伴们都知道 基本上所有的分布式存储系统都有一个共同的特点 将庞大的数据量分成多个小块存储在不同的机器上 通常称为分片 每个分片为了保证它数据不丢失 它们又有各自副本 ClickHouse也不例外 一起来看看ClickHo
  • 5.Mybatis 缓存详解

    5 1 一级缓存 一级缓存 也叫本地缓存 默认会开启 并且不能控制 想要关闭一级缓存可以在select标签上配置flushCache true 一级缓存存在于 SqlSession 的生命周期中 在同一个 SqlSession 中查询时 M
  • 微信小程序之如何注册微信小程序

    注册小程序帐号 在微信公众平台官网首页 mp weixin qq com 点击右上角的 立即注册 按钮 选择注册的帐号类型 显示了4选项 我们现在是注册小程序 所以选择小程序 填写邮箱和密码 请填写未注册过公众平台 开放平台 企业号 未绑定
  • VMware虚拟机安装ubuntu20.04缓慢、卡顿

    背景 VMware Workstation版本是14 本地虚拟机上ubuntu版本是16 04的 有32位和64位 编译原理课程需要18或20以上的版本 决定再装一个20的 出现各种问题 进入黑屏 等三五分钟才缓过来 选择语言中文后 安装卡
  • C# ModbusTcp(协议)

    以下用例为读取线圈 可读取多个连续的线圈 01功能码 起始地址 var inputAddress 4 读取长度 var inputReadLength 8 var station BitConverter GetBytes 4 0 从站地址
  • 编译OpenCV以及openc_contrib提示缺少boostdesc_bgm.i文件出错的解决

    编译OpenCV 以及 openc contrib 提示缺少boostdesc bgm i文件出错的解决 错误 opencv contrib modules xfeatures2d src boostdesc cpp 673 20 fata
  • 软件测试与质量学习笔记3--白盒测试

    1 白盒测试的两种常用技术 覆盖测试 在测试过程中 以覆盖某些程序元素为测试目标的测试 路径测试 从流程图上讲 程序的一次执行对应于从入口到出口的一条路径 针对路径的测试即为路径测试 从广义的角度讲 任何有关路径分析的测试都可以被称为路径测

随机推荐

  • MATLAB大小写字符的转换

    输入一个字符 若为大写字母 则输出其对应的小写字母 若为小写字母 则输入其对应的大写字母 若为数字字符则输出其对应的数值 若为其他字符则原样输出 第一种 clear clc n input enter a number n if n gt
  • 基于STM32的ESP8266使用教程(四)(短篇)

    写在前面 在上一篇中介绍了通过单片机发送指令控制WIFI模块 本来想写一下时钟 I O口及串口的初始化函数 但是因为项目年代久远 一年前做的 怕有错误 误导博友 故不给出代码 见谅 本章要介绍Android端通过WIFI与手机建立连接并通信
  • 代码示例:面向对象——封装、继承、多态(多态的四种类型)

    面向对象 封装 继承 多态 多态的四种类型 1 封装 把客观事物封装成抽象的类 并且类可以把自己的数据和方法只让可信的类或者对象操作 对不可信的进行信息隐藏 public 所有实体都可以访问 protected 只允许本类 和子类 的成员函
  • 【动态规划】---入门(一)

    文章目录 前言 一 斐波那契数列 二 爬楼梯 总结 前言 动态规划入门学习文章记录及总结 动态规划算法的基本思想是 将待求解的问题分解成若干个相互联系的子问题 先求解子问题 然后从这些子问题的解得到原问题的解 对于重复出现的子问题 只在第一
  • 综合案例——手写数字图像处理算法比较

    手写数字图像识别各种算法的比较 1 准备工作 1 1 数据集介绍 使用到了两个手写数字的数据集 scikit learn 中的手写数字数据集 mnist 中的手写数字数据集 1 1 1 scikit learn 中的手写数字数据集 首先来看
  • 清理QT SDK编译后,examples目录中的pdb ilk exp等垃圾文件

    for R s in do del q s s pdb s ilk s exp pause 将上面的代码保存为bat 放到examples根目录下运行 上面的方法是我走的冤枉路 下面的这种方法更简单 在用nmake编译完成后 直接运行nma
  • Bean定义注册机

    org springframework beans factory support BeanDefinitionRegistry 注册Bean定义 org springframework beans factory support Bean
  • docker 安装 oracle

    docker 安装 oracle 拉取镜像 docker pull jaspeen oracle xe 11g 因为版本不同有的可能是jaspeen oracle 11g 运行镜像文件 docker run p 1521 1521 name
  • mysql游标的使用

    p 这是一个游标的使用例子 但是其中有几点需要注意 就是为什么要加入 declare CONTINUE HANDLER FOR SQLSTATE 02000 SET tmpname null 这样的一句话 如果不加的话将直接报错 No da
  • Elasticsearch学习4-数据修改

    数据修改 原文请查看 Modifying Your Data Elasticsearch 提供近乎实时的数据操作和搜索功能 默认情况下 从索引 更新 删除数据到数据出现在搜索结果中 你可以预估一秒钟的延迟 刷新间隔 这是与其他平台 如SQL
  • 波士顿房价(只依据一个特征的)预测

    波士顿房价数据集 波士顿房价数据集中一共有506条数据 涵盖506个不同郊区的房屋数据 在机器学习中 通常要把数据集划分为训练数据集和测试数据集 在波士顿数据库中 默认其中404条是训练数据集 102条作为测试数据集 其中 每条数据有14个
  • arcgis10之矢量数据生成tiff文件

    项目场景 shp数据有时数量过于庞大 不利于操作 但是可以将shp转化成tiff图片导出方便进行下一步操作 解决方案 使用arcgis将shp文件生成tiff即可 具体操作如下 第一步 将shp数据生成栅格数据 具体操作如下图 加载至arc
  • Unable to cast object of type 'System.Decimal' to type 'System.Array'.

    数据库有一个字段AppID 类型定义为numeric 38 0 实体描述如下 Key Column APP ID Required ErrorMessage APP ID不能为空 MaxLength 38 ErrorMessage APP
  • 文件时间对于CP命令的影响

    今天在打包安装包的时候 碰到这样一个问题 打包的服务器时间由于测试需要被改到这个月的月底了 打包的时候我也没有在意这个细节 直接在服务器上重新编译这个代码并且将需要更新的so文件打入tar包里面 tar包的时间 包里面文件的时间都变成这个月
  • 详解如何建立Qt插件学习教程

    如何建立Qt插件学习教程是本文要介绍的内容 主要是来了解QT中插件的应用 如何来建立 文中有详解 具体内容的实现来看详解 QT提供2个API来建立插件 1 高层API扩展QT库 例如定制的数据库驱动 图像格式 字符编码 custom sty
  • 更改远程桌面端口

    远程终端服务是一项功能非常强大的服务 同时也成了入侵者长驻主机的通道 入侵者可以利用一些手段得到管理员账号和密码并入侵主机 这就需要我们来修改默认端口 防范黑客入侵 远程终端服务基于端口3389 入侵者一般先扫描主机开放端口 一旦发现其开放
  • 怎么用计算机输入名字,怎么用电脑起名字

    怎么用电脑起名字 我姓李我老婆姓贺我想给宝宝取个名字 宝宝想跟我 老婆姓贺 最好是叫贺李 怎么通过电脑给宝宝取个高分的名字 输入宝宝出生的年 月 日 时辰 姓什么 男宝宝还是女宝宝 然后查一下就知道了 也可以先找人算一下宝宝属于什么命 命中
  • 虚拟机网络模式设置仅主机模式

    说明 为了更好的模拟生产服务器 可以在本地虚拟机进行相关测试 一般实际的生产服务器是仅能与本地主机或内网相同 所以虚拟机设置固定IP 选择仅主机模式做测试尤为重要 虚拟机网络模式选择Hostonly 即仅主机模式 设置固定IP 和主机相同
  • CentOS 7 修改默认 yum 源

    一 修改CentOS默认yum源为mirrors aliyun com 1 首先备份系统自带的yum源配置文件 root localhost mv etc yum repos d CentOS Base repo etc yum repos
  • android历史记录的搜索页

    保存搜索记录 public void saveSearchHistory String inputText SharedPreferences sp WDApplication getContext getSharedPreferences