国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

詳解Recyclerview item中有EditText使用刷新遇到的坑

2019-10-22 18:11:58
字體:
來源:轉載
供稿:網友

由于工作項目的需要要對商品購買之后添加評價的功能,于是自己仿淘寶的評價的效果圖作為自己項目中的評價效果圖.但是在開發中遇到了一個大坑,就是在動態添加照片之后,刷新適配器的時候.item中的EditText中的文字發生了錯亂的現象.最后bug發現由于如下代碼產生的原因.

/** * 這是一個EditText的文本監聽,因為在activity中要獲取文本內容,所以設置了這個監聽. * 于是,果斷開啟debug模式,最終確認確實是TextWatcher的問題,由于調用了notifyDataSetChanged()方法,而導致EditText重繪, * 并且每次都走了textWatcher的afterTextChanged()方法.導致EditText中的內容發生了錯亂的現象. * */ 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條目復用的時候導致監聽事件的重繪,所以只需要去掉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標記獲取值,設置到控件上

這兩種方法都能解決問題,只是方法一只適合條目較少的情況,如果你的條目較多就不太適用了希望我踩的坑能給你有所幫助,大家一起進步謝謝!!!!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保德县| 石楼县| 泗水县| 昌平区| 三河市| 和平区| 广昌县| 缙云县| 桂林市| 新安县| 修水县| 交口县| 托克逊县| 晋宁县| 靖宇县| 闽清县| 加查县| 延寿县| 利辛县| 吴川市| 三穗县| 江达县| 伊金霍洛旗| 蕲春县| 罗源县| 蒙山县| 宜黄县| 鹤山市| 无极县| 乡城县| 阜城县| 临猗县| 临安市| 石台县| 南京市| 桂阳县| 左贡县| 山阴县| 江北区| 绿春县| 碌曲县|