国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - 詳解Recyclerview item中有EditText使用刷新遇到的坑

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

2022-02-12 17:29ITKobi小丸子 Android

這篇文章主要介紹了詳解Recyclerview item中有EditText使用刷新遇到的坑,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
 * 這是一個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的復用:

?
1
holder.setIsRecyclable(false);

第二種通過view的setTag()方法解決Recyclerview的復用代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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標記獲取值,設置到控件上

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/wmz199123/article/details/73321990?t=1498445624899

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久综合亚洲精品 | 精品久久久久久国产 | 亚洲精品久 | 一级黄色毛片 | 欧美日韩国产在线 | 91精品国产综合久久小仙女陆萱萱 | 91一区二区| a级免费电影 | 久久69精品久久久久久久电影好 | 免费观看一级视频 | 国产高清av在线播放 | 久久国产精品久久久久久电车 | 日韩在线观看中文字幕 | av在线电影网站 | 欧美在线国产 | 欧美狠狠操 | 亚洲一区有码 | 欧美在线a | 日韩3级在线观看 | 欧美在线免费 | 91久草视频| 日本在线视频一区二区三区 | 国产精品1区| 污片在线免费看 | 欧美一区二区在线视频 | 日韩欧美一二三区 | 日美毛片 | 国产精品久久久久久久久久免费看 | 国产中文字幕在线免费观看 | 久久久久久国产一级毛片高清版 | 日韩精品一区二区三区在线观看视频网站 | 日韩和欧美一区二区 | 欧美视频一二三区 | 成人午夜电影在线观看 | 成人永久免费视频 | 国产福利视频 | 视频一区二区中文字幕 | 精品久久久久久亚洲综合网 | 久草中文在线观看 | 欧美日韩一区二区三区不卡视频 | 亚洲午夜精品视频 |