业务的最终需求
需求分析
- 首先在第一次进入该页面时,如第二个图所示,没有搜索历史记录的时候显示的页面
注意:虽然图一,并没有显示搜索历史和下面的条目复用布局,但他是存在的,这里使用了
android:visibility="gone"
对布局进行隐藏
- 历史记录是持久化存储,我这里用的是文件存储
- 对用户所输入的记录建议整行存储,方便整行读取数据
- 数据的条目显示数量,如果条目数量低于5条时,显示所有条目,数量大于5条时显示5个条目
- 用户输入的长度超过屏幕的宽度时,用…隐藏后面的字符
代码实现
第一次进入当前页面时没有 所属的 .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
扫描二维码关注公众号,回复:
11935973 查看本文章