詳解Recyclerview item中有EditText使用刷新遇到的坑
由于工作項目的需要要對商品購買之后添加評價的功能,于是自己仿淘寶的評價的效果圖作為自己項目中的評價效果圖.但是在開發(fā)中遇到了一個大坑,就是在動態(tài)添加照片之后,刷新適配器的時候.item中的EditText中的文字發(fā)生了錯亂的現(xiàn)象.最后bug發(fā)現(xiàn)由于如下代碼產(chǎn)生的原因.
/** * 這是一個EditText的文本監(jiān)聽,因為在activity中要獲取文本內(nèi)容,所以設(shè)置了這個監(jiān)聽. * 于是,果斷開啟debug模式,最終確認確實是TextWatcher的問題,由于調(diào)用了notifyDataSetChanged()方法,而導致EditText重繪, * 并且每次都走了textWatcher的afterTextChanged()方法.導致EditText中的內(nèi)容發(fā)生了錯亂的現(xiàn)象. * */ TextWatcherListener watcher = new TextWatcherListener() { @Override public void afterTextChanged(Editable s) { holder.mEvaluateNumberTv.setText(s.length() + "/100"); if (mOnClickViewListener != null) { mOnClickViewListener.showEditTextListener(position, s.toString()); } } }; holder.mEtEvaluate.setText(mEvaluateProductMap.get(position).getBuyerEvaluate()); holder.mEtEvaluate.addTextChangedListener(watcher);
最后在網(wǎng)上找了很久才知道是Recyclerview條目復用的時候?qū)е卤O(jiān)聽事件的重繪,所以只需要去掉Recyclerview的復用就可以完美的解決這個問題餓.但是我們又知道Recyclerview是自帶復用的怎么去除復用呢? 只需要在onBindViewHolder(EvaluateHolder holder, int position)中添加如下的的代碼就可強制的停用Recyclerview的復用,兩種解決方案
第一種就是強制的停用Recyclerview的復用:
holder.setIsRecyclable(false);
第二種通過view的setTag()方法解決Recyclerview的復用代碼如下:
holder.mEtEvaluate.setTag(position);//綁定tag標記 holder.mEtEvaluate.clearFocus(); TextWatcherListener watcher = new TextWatcherListener() { @Override public void afterTextChanged(Editable s) { holder.mEvaluateNumberTv.setText(s.length() + "/100"); if (mOnClickViewListener != null) { mOnClickViewListener.showEditTextListener((int )(holder.mEtEvaluate.getTag()), s.toString()); //通過tag存儲 } } }; holder.mEtEvaluate.addTextChangedListener(watcher); holder.mEtEvaluate.setText(mEvaluateProductMap.get((holder.mEtEvaluate.getTag())).getBuyerEvaluate()); //通過控件的tag標記獲取值,設(shè)置到控件上
這兩種方法都能解決問題,只是方法一只適合條目較少的情況,如果你的條目較多就不太適用了希望我踩的坑能給你有所幫助,大家一起進步謝謝!!!!
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android中使用RecyclerView實現(xiàn)下拉刷新和上拉加載
- Android RecyclerView實現(xiàn)下拉刷新和上拉加載
- Android RecyclerView 上拉加載更多及下拉刷新功能的實現(xiàn)方法
- Android使用recyclerview打造真正的下拉刷新上拉加載效果
- android RecyclerView側(cè)滑菜單,滑動刪除,長按拖拽,下拉刷新上拉加載
- XRecyclerView實現(xiàn)下拉刷新、滾動到底部加載更多等功能
- Android使用RecyclerView實現(xiàn)自定義列表、點擊事件以及下拉刷新
- Android RecyclerView的刷新分頁的實現(xiàn)
- Android RecyclerView下拉刷新和上拉加載更多
- RecyclerView使用payload實現(xiàn)局部刷新
相關(guān)文章
快速解決fragment中onActivityResult不調(diào)用的問題
下面小編就為大家?guī)硪黄焖俳鉀Qfragment中onActivityResult不調(diào)用的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04解析Android中實現(xiàn)滑動翻頁之ViewFlipper的使用詳解
有一些場景,我們需要向用戶展示一系列的頁面。比如我們正在開發(fā)一個看漫畫的應(yīng)用,可能就需要向用戶展示一張一張的漫畫圖片,用戶使用手指滑動屏幕,可以在前一幅漫畫和后一幅漫畫之間切換。這個時候ViewFlipper就是一個很好的選擇2013-05-05android RadioButton和CheckBox組件的使用方法
本次實驗中主要是學習如何使用RadioGroup,CheckBox,RadioButton和Toast這幾個控件,android UI開發(fā)中也會經(jīng)常用到他們2013-11-11Android startActivityForResult的基本用法詳解
這篇文章主要介紹了Android startActivityForResult的基本用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08Android中利用NetworkInfo判斷網(wǎng)絡(luò)狀態(tài)時出現(xiàn)空指針(NullPointerException)問題的解決
這篇文章主要介紹了Android中利用NetworkInfo判斷網(wǎng)絡(luò)狀態(tài)時出現(xiàn)空指針(NullPointerException)問題的解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-11-11