Android实现搜索保存历史记录功能

本文实例为大家分享了Android搜索保存历史记录功能,供大家参考,具体内容如下

要点:就是缓存输入的内容到 本地 下面就是实现保存 搜索内容到本地 和 清空本地历史的方法

//保存搜索内容到本地
public void save() {
  String text = mKeywordEt.getText().toString();
  String oldText = mSharePreference.getString(SEARCH_HISTORY, "");
  StringBuilder builder = new StringBuilder(text);
  builder.append("," + oldText);
  if (!TextUtils.isEmpty(text) && !oldText.contains(text + ",")) {
    SharedPreferences.Editor myEditor = mSharePreference.edit();
    myEditor.putString(SEARCH_HISTORY, builder.toString());
    myEditor.commit();
  }
  updateData();
} 

//清空本地历史
public void cleanHistory() {
  SharedPreferences.Editor editor = mSharePreference.edit();
  editor.clear();
  editor.commit();
  updateData();
  mSearchHistoryLl.setVisibility(View.GONE);
  SingleToast.show(this, getString(R.string.clear_history_success), Toast.LENGTH_SHORT);
}

activity

import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; 

import com.ccvideo.R;
import com.yizhibo.video.adapter.SearchAdapter;
import com.yizhibo.video.app.YZBApplication;
import com.yizhibo.video.base.BaseListActivity;
import com.yizhibo.video.utils.Constants;
import com.yizhibo.video.utils.SingleToast;
import com.yizhibo.video.utils.Utils; 

public class SearchListActivity extends BaseListActivity implements View.OnClickListener {
  public static final String EXTRA_KEY_TYPE = "extra_key_type";
  private static final String PRE_SEARCH_HISTORY = "pre_search_history";
  private static final String SEARCH_HISTORY = "search_history"; 

  private EditText mKeywordEt;
  private TextView mOperationTv;
  private ArrayAdapter<String> mArrAdapter;
  private SharedPreferences mSharePreference; 

  private LinearLayout mSearchHistoryLl;
   private List<String> mHistoryKeywords;
  private ListView mListView;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mSharePreference = YZBApplication.getApp().getSharedPreferences(PRE_SEARCH_HISTORY, 0);
    setContentView(R.layout.activity_search_list);
    mKeywordEt = (EditText) findViewById(R.id.tab_bar_keyword_et);
mHistoryKeywords = new ArrayList<String>(); 

    mKeywordEt.addTextChangedListener(new TextWatcher() {
      @Override
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override
      public void onTextChanged(CharSequence s, int start, int before, int count) {
        if (s.length() == 0) {
          mAdapter.clear();
          mAdapter.notifyDataSetChanged();
          mOperationTv.setText(R.string.cancel);
          mEmptyView.hide();
          clearKeywordIv.setVisibility(View.GONE);
          if (mHistoryKeywords.size() > 0) {
            mSearchHistoryLl.setVisibility(View.VISIBLE);
          } else {
            mSearchHistoryLl.setVisibility(View.GONE);
          }
        } else {
          mSearchHistoryLl.setVisibility(View.GONE);
          mOperationTv.setText(R.string.search);
          clearKeywordIv.setVisibility(View.VISIBLE);
        }
      } 

      @Override
      public void afterTextChanged(Editable s) { 

      }
    });
    mKeywordEt.requestFocus();
    mOperationTv = (TextView) findViewById(R.id.tab_bar_cancel_tv);
    mOperationTv.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (mKeywordEt.getText().length() > 0) {
          hideInputMethod();
          save();
        } else {
          finish();
        }
      }
    });
    initSearchHistory(); 

  } 

  public void initSearchHistory() {
    mSearchHistoryLl = (LinearLayout) findViewById(R.id.search_history_ll);
    ListView listView = (ListView) findViewById(R.id.search_history_lv);
    findViewById(R.id.clear_history_btn).setOnClickListener(this);
    String history = mPref.getString(Preferences.KEY_SEARCH_HISTORY_KEYWORD);
    if (!TextUtils.isEmpty(history)){
      List<String> list = new ArrayList<String>();
      for(Object o : history.split(",")) {
        list.add((String)o);
      }
      mHistoryKeywords = list;
    }
    if (mHistoryKeywords.size() > 0) {
      mSearchHistoryLl.setVisibility(View.VISIBLE);
    } else {
      mSearchHistoryLl.setVisibility(View.GONE);
    }
    mArrAdapter = new ArrayAdapter<String>(this, R.layout.item_search_history, mHistoryKeywords);
    listView.setAdapter(mArrAdapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        mKeywordEt.setText(mHistoryKeywords.get(i));
        mSearchHistoryLl.setVisibility(View.GONE);
      }
    });
    mArrAdapter.notifyDataSetChanged();
  } 

  public void save() {
    String text = mKeywordEt.getText().toString();
    String oldText = mPref.getString(Preferences.KEY_SEARCH_HISTORY_KEYWORD);
    if (!TextUtils.isEmpty(text) && !oldText.contains(text)) {
      mPref.putString(Preferences.KEY_SEARCH_HISTORY_KEYWORD, text + "," + oldText);
      mHistoryKeywords.add(0,text);
    }
    mArrAdapter.notifyDataSetChanged();
  } 

 public void cleanHistory() {
    mPref.remove(Preferences.KEY_SEARCH_HISTORY_KEYWORD);
    mHistoryKeywords.clear();
    mArrAdapter.notifyDataSetChanged();
    mSearchHistoryLl.setVisibility(View.GONE);
    SingleToast.show(this, getString(R.string.clear_history_success), Toast.LENGTH_SHORT);
  }
  public void updateData(){
    String history = mSharePreference.getString(SEARCH_HISTORY, "");
    mHistoryArr = history.split(",");
    mArrAdapter = new ArrayAdapter<String>(this,
        R.layout.activity_searchhistory, mHistoryArr);
    mListView.setAdapter(mArrAdapter);
    mArrAdapter.notifyDataSetChanged();
  } 

  @Override
  public void onClick(View view) {
    switch (view.getId()) {
      case R.id.clear_history_btn:
        cleanHistory();
        break;
    }
  }
}

下拉弹出layout布局

<LinearLayout
    android:id="@+id/search_history_ll"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_below="@id/global_search_action_bar_rl"
    android:layout_height="wrap_content">
    <TextView
      android:id="@+id/contentTextView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textSize="@dimen/text_size_title_h2"
      android:text="@string/search_history"
      android:paddingLeft="10dp"
      android:textColor="@color/text_gray"/>
    <ListView
      android:id="@+id/search_history_lv"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:cacheColorHint="@android:color/transparent"
      android:listSelector="@drawable/list_item_selector">
    </ListView>
    <Button
      android:id="@+id/clear_history_btn"
      android:layout_width="210dp"
      android:layout_height="@dimen/button_common_height"
      android:layout_below="@id/rise_crash_ll"
      android:layout_marginTop="5dp"
      android:textColor="@color/text_btn_selector"
      android:layout_gravity="center"
      android:textSize="@dimen/text_size_title_h2"
      android:layout_centerHorizontal="true"
      android:text="@string/clear_search_history"
      android:background="@drawable/round_btn_selector"
      style="?android:buttonBarButtonStyle"/>
  </LinearLayout>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android流式布局实现历史搜索记录功能

    最近在开发项目的时候,有一个需求是展示历史搜索记录 ,展示的样式是流式布局(就是根据内容自动换行).在网上看到了一个不错的类库跟大家分享一下 首先在AndroidStudio简历一个工程项目导入module类库,我会把项目demo方法GitHub上 说一下demo中的实现方式 在 activity_main.xml中 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android

  • Android项目类似淘宝 电商 搜索功能,监听软键盘搜索事件,延迟自动搜索,以及时间排序的搜索历史记录的实现

    最近跳槽去新公司,接受的第一个任务是在 一个电商模块的搜索功能以及搜索历史记录的实现. 需求和淘宝等电商的功能大体差不多,最上面一个搜索框,下面显示搜索历史记录.在EditText里输入要搜索的关键字后,按软键盘的搜索按键/延迟xxxxms后自动搜索.然后将搜索的内容展示给用户/提示用户没有搜到相关信息. 历史记录是按时间排序的,最新的在前面,输入以前搜索过的关键字,例如牛仔裤(本来是第二条),会更新这条记录的时间,下次再看,牛仔裤的排列就在第一位了.并且有清除历史记录的功能. 整理需求,大致需

  • Android实现搜索功能并本地保存搜索历史记录

    本文实例为大家分享了Android实现搜索功能,并且需要显示搜索的历史记录,供大家参考,具体内容如下 效果图: 本案例实现起来很简单,所以可以直接拿来嵌入项目中使用,涉及到的知识点: - 数据库的增删改查操作 - ListView和ScrollView的嵌套冲突解决 - 监听软键盘回车按钮设置为搜索按钮 - 使用TextWatcher( )实时筛选 - 已搜索的关键字再次搜索不重复添加到数据库 - 刚进入页面设置软键盘不因为EditText而自动弹出 代码 RecordSQLiteOpenHel

  • Android实现搜索保存历史记录功能

    本文实例为大家分享了Android搜索保存历史记录功能,供大家参考,具体内容如下 要点:就是缓存输入的内容到 本地 下面就是实现保存 搜索内容到本地 和 清空本地历史的方法 //保存搜索内容到本地 public void save() { String text = mKeywordEt.getText().toString(); String oldText = mSharePreference.getString(SEARCH_HISTORY, ""); StringBuilder

  • 使用JS location实现搜索框历史记录功能

    首先,来看下效果图(样式什么的就不必吐槽了哈) html代码 <form id="hisform"> <div id="searchbox"> <input id="inpt" type="text" autocomplete="off" /> <input id="btn" type="button" value="

  • 非常简单的Android打开和保存对话框功能

    在Android上没有标准的打开和另存为对话框.在本代码中,我将详细描述一个非常简单的打开和保存对话框实现过程,对于Android初学者来说非常有用,对话框都是全屏活动的. 主要功能: 1.访问任何目录的SD卡 2.递归访问文件夹 3.单一文件选择 4.通过按硬件后退按钮升级 5.确认文件选择OK按钮 activity_open_file.xml <LinearLayout xmlns:android="<a href="http://schemas.android.com

  • android实现搜索功能并将搜索结果保存到SQLite中(实例代码)

    运行结果: 涉及要点: ListView+EditText+ScrollView实现搜索效果显示 监听软键盘回车执行搜索 使用TextWatcher( )实时筛选 将搜索内容存储到SQLite中(可清空历史记录) 监听EditText的焦点,获得焦点弹出软键盘同时显示搜索历史,失去焦点隐藏软件盘和ListView. 实现过程比较简单,都是常用的,这里就不讲解了.代码可直接复制使用. 实现过程: MainActivity.java public class MainActivity extends

  • Android实现搜索历史功能

    本文实例为大家分享了Android实现搜索历史的具体代码,供大家参考,具体内容如下 SharedPreferences实现本地搜索历史功能,覆盖搜索重复的文本,可清空 1. 判断搜索内容是否含表情,不需要可以不判断 /** * 校验字符串是否含有表情 * @param content * @return */ public static boolean hasEmoji(String content){ Pattern pattern = Pattern.compile("[\ud83c\udc

  • Vue 实现输入框新增搜索历史记录功能

    vue实现搜索显示历史搜索记录,采用插件-good-storage 安装插件    npm install good-storage -S 在本地新建cache.js文件,该文件是关于本地存储的逻辑处理(缓存到本地的数据最大缓存15条,并且新的插入在第一位,首先得到当前的存储数据情况,将关键字存到数组中,判断如果数组中有相同的数据,则把重复的数据删除,将新的关键字存入到前面) cache.js 文件中的代码如下 /*把搜索的结果保存下来*/ /*用export把方法暴露出来*/ /*定义存储搜索

  • android通过拼音搜索中文的功能实现代码

    好几年没写博客了,很多知识不记是真的会忘记,以后还是保持写博客的习惯吧.坚持不一定成功,但放弃一定很舒服!(开玩笑(#^.^#)) 回归正题,今天我要记录的是拼音搜索功能,我记得16年的时候做过这个功能.现在已经忘记很多细节了,所以这次好好写一写! 第一步:准备 第三方包--中文转拼音,pinyin4j-2.5.0.jar,官网http://pinyin4j.sourceforge.net/ Filterable.java 过滤接口 第二步:分析功能并实现 很明显,这是两个功能,一个是中文转拼音

  • Android ActionBar搜索功能用法详解

    本文实例讲述了Android ActionBar搜索功能用法.分享给大家供大家参考,具体如下: 使用ActionBar SearchView时的注意点: 首先要吐槽一下Android的官方Guide文档 ,关于用法讲得不明确,可能是一直没更新的原因吧. 本来照着文档搞了一下,hint死活出不来,也无法跳转到搜索结果Activity. StackOverflow也有人提出了这个问题,答案说得很明白 - 参考链接. 正确用法 1. 在AndroidManifest.xml中为提供SearchView

  • Android开发实现仿京东商品搜索选项卡弹窗功能

    本文实例讲述了Android开发实现仿京东商品搜索选项卡弹窗功能.分享给大家供大家参考,具体如下: 一.效果图: 二.思路: (1)首先顶部布局由通过LinearLayout水平按比重平均分配各个item宽度. (2)每个item设置两种状态,点击状态与未点击状态 (3)弹窗由PopupWindow实现 三.布局 (1)item布局 <!-- 优先筛选条件布局 --> <RelativeLayout android:id="@+id/rl_priority_filter&quo

随机推荐