Android 实现搜索历史

业务的最终需求

需求的最终效果

需求分析

  1. 首先在第一次进入该页面时,如第二个图所示,没有搜索历史记录的时候显示的页面

注意:虽然图一,并没有显示搜索历史和下面的条目复用布局,但他是存在的,这里使用了

android:visibility="gone"

对布局进行隐藏

  1. 历史记录是持久化存储,我这里用的是文件存储
  2. 对用户所输入的记录建议整行存储,方便整行读取数据
  3. 数据的条目显示数量,如果条目数量低于5条时,显示所有条目,数量大于5条时显示5个条目
  4. 用户输入的长度超过屏幕的宽度时,用…隐藏后面的字符

代码实现

第一次进入当前页面时没有 所属的 .txt,

        try {
            FileOutputStream searchHistory = openFileOutput(path,MODE_APPEND);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

如果你有更好的创建.txt 文件的方法,请联系我(小坑或者我学艺不精)

// todo 问题多,解决麻烦  是否可以实现不确定(本人没有实现)
  File file = new File(路径);
        if (!file.exists() || !file.isFile()){
            file.createNewFile();
        }

读取文件数据代码

FileInputStream inputStream = openFileInput(path);
         //判断所属的txt中是否有数据
         int lenght = inputStream.available();
         Toast.makeText(this, ""+lenght, Toast.LENGTH_SHORT).show();
         if (lenght!=0){
             //如果文件长度大于0 的时候说明,有历史记录进行存储过,有存储记录时显示出隐藏的布局
             search_search_history_wuyan.setVisibility(View.VISIBLE);
             recycler.setVisibility(View.VISIBLE);
         }
         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
         String line = "";
         while ((line = bufferedReader.readLine())!=null){
             list.add(line);//将读取到的数据放入集合,
         }

没有使用
search_search_history_wuyan.setVisibility(View.VISIBLE);
recycler.setVisibility(View.VISIBLE);
前的效果
在这里插入图片描述
使用 后效果 ,
在这里插入图片描述

这个是对历史的相关数据展示的recyclerview

recycler.setLayoutManager(linearLayoutManager);// 设置布局

 RecyclerAdapter recyclerAdapter = new RecyclerAdapter(this);
 recyclerAdapter.setList(list);
  recyclerAdapter.notifyDataSetChanged();
  recycler.setAdapter(recyclerAdapter);

存储搜索记录的代码

@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.search_incudel_search_wuyan:
                String writedata = search_incudel_et_wuyan.getText().toString().trim();//获得et 数据
                if (!writedata.equals("")){
                    try {
                        FileOutputStream outputStream = openFileOutput(path,MODE_APPEND);
                        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
                        bufferedWriter.write(writedata+"\n");// 注意\n 换行符
                        
                        bufferedWriter.close();
                        outputStream.close();
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }else {
                    Toast.makeText(this, "请输入相关词汇", Toast.LENGTH_SHORT).show();
                }
                break;
        }
    }

以上步骤后可以显示出来开头所示的效果图展示

1.细心观察会发现数据显示顺序会出现问题,这是因为模式写成了MODE_APPEND 追加模式,数据都是在原本的基础上追加的,而我们整行读取读取的时候是按文件顺序读取的,导致数据发生颠倒,解决此问题查看:添加链接https://blog.csdn.net/Java_0856/article/details/109054357

猜你喜欢

转载自blog.csdn.net/Java_0856/article/details/109055270
今日推荐