詳解Recyclerview item中有EditText使用刷新遇到的坑
由于工作項目的需要要對商品購買之后添加評價的功能,于是自己仿淘寶的評價的效果圖作為自己項目中的評價效果圖.但是在開發(fā)中遇到了一個大坑,就是在動態(tài)添加照片之后,刷新適配器的時候.item中的EditText中的文字發(fā)生了錯亂的現象.最后bug發(fā)現由于如下代碼產生的原因.
/**
* 這是一個EditText的文本監(jiān)聽,因為在activity中要獲取文本內容,所以設置了這個監(jiān)聽.
* 于是,果斷開啟debug模式,最終確認確實是TextWatcher的問題,由于調用了notifyDataSetChanged()方法,而導致EditText重繪,
* 并且每次都走了textWatcher的afterTextChanged()方法.導致EditText中的內容發(fā)生了錯亂的現象.
*
*/
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);
最后在網上找了很久才知道是Recyclerview條目復用的時候導致監(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標記獲取值,設置到控件上
這兩種方法都能解決問題,只是方法一只適合條目較少的情況,如果你的條目較多就不太適用了希望我踩的坑能給你有所幫助,大家一起進步謝謝!!!!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android中使用RecyclerView實現下拉刷新和上拉加載
- Android RecyclerView實現下拉刷新和上拉加載
- Android RecyclerView 上拉加載更多及下拉刷新功能的實現方法
- Android使用recyclerview打造真正的下拉刷新上拉加載效果
- android RecyclerView側滑菜單,滑動刪除,長按拖拽,下拉刷新上拉加載
- XRecyclerView實現下拉刷新、滾動到底部加載更多等功能
- Android使用RecyclerView實現自定義列表、點擊事件以及下拉刷新
- Android RecyclerView的刷新分頁的實現
- Android RecyclerView下拉刷新和上拉加載更多
- RecyclerView使用payload實現局部刷新
相關文章
Android App開發(fā)中自定義View和ViewGroup的實例教程
這篇文章主要介紹了Android App開發(fā)中自定義View和ViewGroup的實例教程,分別介紹了進度條和圖片上傳并排列的例子,效果很好很強大,需要的朋友可以參考下2016-05-05
Android Studio 超級簡單的打包生成apk的方法
本篇文章主要介紹了Android Studio 超級簡單的打包生成apk的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
關于Android的 DiskLruCache磁盤緩存機制原理
DiskLruCache是一種管理數據存儲的技術,單從Cache的字面意思也可以理解到,"Cache","高速緩存";今天我們來從源碼上分析下DiskLruCache;關于Android LruCache的緩存機制原理,需要的朋友可以參考下面文章的具體內容2021-09-09
android開發(fā)教程之獲取使用當前api的應用程序名稱
開發(fā)手機安全管家的時候,比如要打電話,或者照相需要知道是哪個應用程序在調用,就可以在API接口中調用下面的代碼2014-02-02
Android 跨進程模擬按鍵(KeyEvent )實例詳解
這篇文章主要介紹了Android 跨進程模擬按鍵(KeyEvent )實例詳解的相關資料,類似手機遙控器的需求就可以這么做,需要的朋友可以參考下2016-11-11
Android App中使用ViewPager實現滑動分頁的要點解析
這篇文章主要介紹了Android App中使用ViewPager實現滑動分頁的要點解析,還附帶了一個禁止ViewPager左右滑動的方法,需要的朋友可以參考下2016-06-06

