搜索保存歷史記錄功能

来源:http://www.cnblogs.com/ganchuanpu/archive/2017/05/10/6833438.html
-Advertisement-
Play Games

要點:就是緩存輸入的內容到 本地 下麵就是實現保存 搜索內容到本地 和 清空本地歷史的 方法 activity 下拉彈出layout佈局 ...


要點:就是緩存輸入的內容到 本地 下麵就是實現保存 搜索內容到本地 和 清空本地歷史的 方法

//保存搜索內容到本地 
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>  

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ​ JS中的函數大多數情況下都是由用戶主動調用觸發的,但在一些少數情況下,函數的觸發不是由用戶直接控制的。在這些場景下,函數有可能被非常頻繁地調用,而造成大的性能問題。 函數被頻繁調用的場景 鍵盤事件: 參考百度的搜索框沒輸入一個字母就發送一次Ajax請求開銷很大 通過下麵的函數可以實現性能的優化, ...
  • 1、代碼 2、效果 ...
  • HTML5進行app開發具有開發快,跨平臺等優點,但是當客戶需要訪問照相機或者調用攝像頭等硬體的時候,H5就會有限制,必須要調用原生方法進行設備訪問。下麵簡要介紹JS和原生方法互相調用的方法: 1 在webview的進行配置,首先支持JS和JS介面訪問: 這裡JSHook是一個Java類: 這裡只是 ...
  • 主要的有: 字體相關:line-height, font-family, font-size, font-style, font-variant, font-weight, font 文本相關: letter-spacing, text-align, text-indent, text-transf ...
  • 開本系列,談談一些有趣的 CSS 題目,題目類型天馬行空,想到什麼說什麼,不僅為了拓寬一下解決問題的思路,更涉及一些容易忽視的 CSS 細節。 解題不考慮相容性,題目天馬行空,想到什麼說什麼,如果解題中有你感覺到生僻的 CSS 屬性,趕緊去補習一下吧。 不斷更新,不斷更新,不斷更新,重要的事情說三遍 ...
  • $("#cbutton1").bind("click",{"id":"111","name":"aaa"},getData); 這一句給 cbutton1 指定了 click 事件的綁定函數為 getData,並且向該函數傳遞了JSON格式參數 {"id":"111", "name":"aaa"}. ...
  • var val = $("select[name='type_irb'] option:selected").val(); ...
  • 轉載請註明——博客園igoslly:http://www.cnblogs.com/igoslly/p/6833544.html 轉載請註明——博客園igoslly:http://www.cnblogs.com/igoslly/p/6833544.html 在實際方法調用中,程式按順序逐句執行,直到“ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...