Android實(shí)現(xiàn)搜索歷史記錄的本地存儲(chǔ)。

主要通過SharedPreferences進(jìn)行存儲(chǔ),難點(diǎn)主要是1.倒序顯示 2.去重 3.最多顯示n條。話不多說看代碼

private final static String PREFERENCE_NAME = "superservice_ly";
private final static String SEARCH_HISTORY="linya_history";
// 保存搜索記錄
    public static void saveSearchHistory(String inputText) {
        SharedPreferences sp = App.context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        if (TextUtils.isEmpty(inputText)) {
            return;
        }
        String longHistory = sp.getString(SEARCH_HISTORY, "");  //獲取之前保存的歷史記錄
        String[] tmpHistory = longHistory.split(","); //逗號(hào)截取 保存在數(shù)組中
        List<String> historyList = new ArrayList<String>(Arrays.asList(tmpHistory)); //將改數(shù)組轉(zhuǎn)換成ArrayList
        SharedPreferences.Editor editor = sp.edit();
        if (historyList.size() > 0) {
            //1.移除之前重復(fù)添加的元素
            for (int i = 0; i < historyList.size(); i++) {
                if (inputText.equals(historyList.get(i))) {
                    historyList.remove(i);
                    break;
                }
            }
            historyList.add(0, inputText); //將新輸入的文字添加集合的第0位也就是最前面(2.倒序)
            if (historyList.size() > 8) {
                historyList.remove(historyList.size() - 1); //3.最多保存8條搜索記錄 刪除最早搜索的那一項(xiàng)
            }
            //逗號(hào)拼接
            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();
        }
    }
//獲取搜索記錄
    public static List<String> getSearchHistory(){
        SharedPreferences sp = App.context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
        String longHistory =sp.getString(SEARCH_HISTORY, "");
        String[] tmpHistory = longHistory.split(","); //split后長度為1有一個(gè)空串對(duì)象
        List<String> historyList = new ArrayList<String>(Arrays.asList(tmpHistory));
        if (historyList.size() == 1 && historyList.get(0).equals("")) { //如果沒有搜索記錄,split之后第0位是個(gè)空串的情況下
            historyList.clear();  //清空集合,這個(gè)很關(guān)鍵
        }
        return historyList;
    }

代碼就這些,放到你的工具類里面,在你需要的地方調(diào)用就好了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,300評(píng)論 25 708
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,085評(píng)論 2 59
  • 第一章 歲月靜好 筆尖澀澀的,寫不出字來,只在白紙上留下帶著干涸墨跡、令人難堪的凹跡。沈清終究還是抓起了鋼筆,在演...
    許日清閱讀 470評(píng)論 3 2
  • 我曾有一刻鐘的遲疑 是要繼續(xù)思維的不切實(shí)際 還是拖過被子 沉沉睡去 我憎惡這喑啞的夜 風(fēng)中騷動(dòng)的窗簾 猙獰的剪影...
    煤灰大仙閱讀 190評(píng)論 0 0
  • 前言: 還記得你當(dāng)初為什么加入007嗎?不忘初心,不忘初心,不忘初心~~ 1.概括: 和時(shí)間做朋友是我們理想狀態(tài),...
    winwinwings閱讀 366評(píng)論 0 4

友情鏈接更多精彩內(nèi)容