1. 程式人生 > >Android基於RecyclerView實現高亮搜索列表

Android基於RecyclerView實現高亮搜索列表

新生代 gil char 能力 hub != AD listview 主動

這篇應該是RecycleView的第四篇了,RecycleView真是新生代的寵兒能做這麽多的事情。

轉載請註明作者AndroidMsky及原文鏈接
http://blog.csdn.net/AndroidMsky/article/details/53306657

本文Github:歡迎star
https://github.com/AndroidMsky/SearchView

話不多說先看今天的實現的效果:

技術分享圖片

相信這樣的效果非常多項目都會用到,今天就講講利用RecycleView來實現他,博主把此篇文章定位0基礎篇

,可能由於這確實非常easy,所以我要更要講的具體一點讓新手也能夠能看的懂。

飯要開始做了,我們要準備哪些食材呢。

1.一個RecyclerView或是listview或是其它能夠顯示多item的控件(基本的幹貨)
2.搞清楚EditText的實時監聽
3.讓一個textview出現不同的顏色
4.怎樣穿過Adpter找出textview中key值(也就是高亮字符串)

當你打通這四個技術點後。假設還不能實現這樣的效果,那麽你能說你如今的學習太死板,不會活學活用。假設你看到效果立刻想到這四個技術點說明你有一定的項目組織能力了。接下來我們就解析一下這個四個食材。
1.RecyclerView猶豫這裏比較簡單能夠使用原聲的RecyclerView。可是筆者一直在用封裝好的RecyclerView所以還用我之前封裝好的來實現假設對RecyclerView還不熟悉的傳送門送你走:
http://blog.csdn.net/androidmsky/article/details/52922348

2.EditText事實輸入監聽,事實上就是個借口每次Editext中的字符發生改變會回調這個接口:

TextWatcher textWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int
i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { } };

啪啪啪一註冊接口。onTextChanged就是我們想要的方法了:

        editMobile.addTextChangedListener(textWatcher);

3.textview顯示不同顏色,事實上這有非常多種實現方式,最笨的就是用兩個或者說是用三個textview左右挨著實現高亮顏色,然而這並不科學,我們使用StringFormatUtil這樣一個工具類來實現高亮顏色。

StringFormatUtil spanStr3 = new 
//各自是上下文,原串,key。高亮顏色。

StringFormatUtil(mContext, data.name, mkey, R.color.blue).fillColor(); customerHolder.tvName.setText(spanStr3.getResult());

4.Adapter怎樣知道key。
在構造方法去傳入就能夠了:

 public CustomerCampanySearchAdapter(List<Customer> list, Context context, String key) {
        super(list);
        mContext = context;
        mkey = key;
        this.list = list;
    }

好的4個食材我們就準備好了
烹飪邏輯例如以下:

1.註冊生產全部類。

2.在實時監控edittext的回調接口中又一次構造CustomerCampanySearchAdapter傳入新的key值。

public void showCustomer(List<Customer> list, String key) {
        if (list == null || list.size() == 0)
            return;
        customerList.clear();
        customerList.addAll(list);
        adapter = new CustomerCampanySearchAdapter(customerList, this, key);
        superRecyclerView.setAdapter(adapter);
        superRecyclerView.showData();

        adapter.setOnItemClickListener(new BaseRecyclerAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position, long id) {
                //
            }
        });

    }

3.在CustomerCampanySearchAdapter中的onBindViewHolder方法中改變Textview的高亮key值。

@Override
    public void onBindViewHolder(BaseRecyclerViewHolder holder, int position, final Customer data) {
        CustomerHolder customerHolder = (CustomerHolder) holder;
        customerHolder.tvName.setText(data.name);
        StringFormatUtil spanStr3 = new StringFormatUtil(mContext, data.name,
                mkey, R.color.blue).fillColor();
        if (spanStr3 != null)
            customerHolder.tvName.setText(spanStr3.getResult());
        else customerHolder.tvName.setText(data.name);
    }

效果就這樣完美實現了。也提倡大家在分析的時候一定要冷靜。首先看懂自己要什麽效果,之後就是你須要什麽子效果,然後是怎麽把這些子效果串起來實現終於的效果。

本文Github:歡迎star
https://github.com/AndroidMsky/SearchView

歡迎加作者自營安卓開發交流群:308372687

技術分享圖片

博主原創未經同意不得轉載。轉載必究

—————————————————————————————
作者推薦: 安卓自己定義view滾動數據顯示
http://blog.csdn.net/androidmsky/article/details/53009886
RecyclerView下拉刷新分頁載入性能優化和Gilde配合載入三部曲
http://blog.csdn.net/androidmsky/article/details/53115818
打造企業級網絡請求框架集合retrofit+gson+mvp
http://blog.csdn.net/androidmsky/article/details/52882722
安卓手機自己主動接起QQ視頻秒變攝像頭
http://blog.csdn.net/androidmsky/article/details/53066441 —————————————————————————————

Android基於RecyclerView實現高亮搜索列表