Android 搜索内容保存历史记录

Posted ~~~周

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 搜索内容保存历史记录相关的知识,希望对你有一定的参考价值。

android 搜索内容保存历史记录

一、界面布局

主界面布局 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:layout_marginTop="10dp">
            <EditText
                android:id="@+id/e1"
                android:layout_weight="5"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:background="@android:color/transparent"
                android:maxLength="20"
                android:textSize="13sp"
                android:textColor="#000"
                android:hint="输入关键词进行搜索"/>
        <Button
            android:id="@+id/b1"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="确定"
            android:background="@null"/>
    </LinearLayout>
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="5dp"
        android:background="#74D5D5D5"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="历史搜索"
            android:textColor="#000"
            android:padding="20dp"
            android:textSize="16sp"/>
        <TextView
            android:id="@+id/t1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="end"
            android:layout_marginRight="20dp"
            android:text="清除搜索记录"/>
    </LinearLayout>
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/r1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="20dp"/>

</LinearLayout>

次界面布局 activity_main2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity2">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        android:background="#FF6200EE">
        <ImageView
            android:id="@+id/fh"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_gravity="center"
            android:layout_marginLeft="20dp"
            android:src="@mipmap/photos3"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginRight="20dp"
            android:gravity="center"
            android:textSize="20sp"
            android:textColor="#fff"
            android:text="商品列表"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">
        <LinearLayout
            android:layout_width="350dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:background="#2CCACACA">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@mipmap/photos4"/>
            <TextView
                android:id="@+id/e1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:background="@android:color/transparent"
                android:maxLength="20"
                android:textSize="13sp"/>
        </LinearLayout>
        <ImageView
            android:id="@+id/i3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/photos11"/>
    </LinearLayout>
    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="50.0dip"
        android:background="#FFFFFF">

        <!--layout_weight这个属性为权重,让两个textview平分这个linearLayout-->
        <TextView
            android:id="@+id/t1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1.0"
            android:gravity="center"
            android:text="综合"
            android:textSize="15dp"
            android:textColor="#F36778D5" />

        <TextView
            android:id="@+id/t2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1.0"
            android:gravity="center"
            android:text="销量"
            android:textSize="15dp"
            android:textColor="#000000" />
        <LinearLayout
            android:layout_weight="1.0"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/t3"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="价格"
                android:textSize="15dp"
                android:textColor="#000000" />
            <ImageView
                android:id="@+id/i1"
                android:layout_width="20dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@mipmap/photos8"/>
        </LinearLayout>
        <LinearLayout
            android:layout_weight="1.0"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/t4"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="筛选"
                android:textSize="15dp"
                android:textColor="#000000" />
            <ImageView
                android:id="@+id/i2"
                android:layout_width="20dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:src="@mipmap/photos9"/>
        </LinearLayout>

    </LinearLayout>
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/r1"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </androidx.recyclerview.widget.RecyclerView>
</LinearLayout>

列表界面布局 list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp">
    <TextView
        android:id="@+id/t1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="15dp"
        android:singleLine="true"
        android:layout_marginRight="5dp"
        android:layout_marginLeft="5dp"
        android:text="椅子"
        android:textColor="#000"/>
</LinearLayout>

界面展示
在这里插入图片描述
二、功能实现
新建一个Adapter.class

package com.likeit.note7;


import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
    private String[]a;
    private int length;
    private String result;
    Adapter(String[] a, String result) {
        this.a=a;
        this.result=result;
    }

    @NonNull
    @Override
    public Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(Adapter.ViewHolder holder, int position) {
        if(result.equals("1"))
        {
            holder.t1.setText("");
        }
        else
        {
            holder.t1.setText(a[position]);
        }

    }

    @Override
    public int getItemCount() {
        try {
            length=a.length;
        }catch (Exception e)
        {
            e.printStackTrace();
            length=0;
        }
        return length;
    }
    public class ViewHolder extends RecyclerView.ViewHolder {
        private TextView t1;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            t1 = itemView.findViewById(R.id.t1);//绑定id
        }
    }
}

MainActivity.class

package com.likeit.note7;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {
    private EditText e1;
    private Button b1;
    private TextView t1;
    private RecyclerView r1;
    private String result;
    private String[] str1;
    private GridLayoutManager gridLayoutManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        e1=(EditText)findViewById(R.id.e1);
        b1=(Button)findViewById(R.id.b1);
        t1=(TextView)findViewById(R.id.t1);
        r1=(RecyclerView)findViewById(R.id.r1);
        gridLayoutManager=new GridLayoutManager(MainActivity.this,5);
        r1.setLayoutManager(gridLayoutManager);
        //读取文件
        StringBuffer stringBuffer=new StringBuffer();
        try {
            InputStream inputStream=openFileInput("myfile");
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
            String cout=null;
            while((cout=bufferedReader.readLine())!=null)
            {
                stringBuffer.append(cout);
            }
            //将获取到的文件内容写入数组
            str1=stringBuffer.toString().substring(0,stringBuffer.length()-1).split(",");
            Adapter adapter=new Adapter(str1,"0");
            r1.setAdapter(adapter);
            bufferedReader.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                result = e1.getText().toString().trim();
                //判断搜索内容是否重复,重复则不写入
                try {
                    for(int i=0;i<=str1.length;i++)
                    {
                        if(result.equals(str1[i]))
                        {
                            Intent intent=new Intent(MainActivity.this,MainActivity2.class);
                            intent.putExtra("ss",result);
                            startActivity(intent);
                            return;
                        }
                    }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
                //将内容写入文件
                try {
                    OutputStream outputStream = openFileOutput("myfile", MODE_APPEND);
                    //判断搜索内容是否为空,为空则不写入
                    if(result.equals(""))
                    {
                        Intent intent=new Intent(MainActivity.this,MainActivity2.class);
                        intent.putExtra("ss",result);
                        startActivity(intent);
                        return;
                    }
                    String str = result + ",";//用句号分隔开
                    outputStream.write(str.getBytes());
                    outputStream.flush();
                    outputStream.close();
                    Intent intent=new Intent(MainActivity.this,MainActivity2.class);
                    intent.putExtra("ss",result);
                    startActivity(intent);
                } catch (Exception e) {
                    e.printStackTraceAndroid搜索功能的案例,本地保存搜索历史记录......

Android搜索功能的案例,本地保存搜索历史记录

Android搜索功能的案例,本地保存搜索历史记录

搜索保存历史记录功能

使用localStorage将搜索商品的记录保存在本地

Android学习 实现带自动补全与历史记录的自定义搜索框