最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年05月05日 14:45:53   作者:ITKobi小丸子  
這篇文章主要介紹了詳解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標記獲取值,設置到控件上

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

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

相關文章

最新評論

晋州市| 长垣县| 马关县| 正蓝旗| 三江| 台北市| 南丹县| 鲜城| 罗源县| 四川省| 湖北省| 玛沁县| 五峰| 宝鸡市| 绥阳县| 孝昌县| 上蔡县| 历史| 漳州市| 丽江市| 绥芬河市| 东阿县| 周宁县| 鄂尔多斯市| 夏邑县| 格尔木市| 新疆| 克拉玛依市| 昂仁县| 崇仁县| 长白| 新巴尔虎右旗| 突泉县| 喜德县| 五莲县| 罗甸县| 苏尼特左旗| 宕昌县| 崇明县| 井冈山市| 朝阳区|