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

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

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

相信這種效果很多專案都會用到,今天就講講利用RecycleView來實現他,博主把此篇文章定位初級篇,可能因為這確實很簡單,所以我要更要講的詳細一點讓新手也可以能看的懂。

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

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