2020-06-29踩坑記-在 RecyclerView 中使用 多個EditText 滾動后數(shù)據(jù)混亂

你想想,對于addTextChangedListener這個方法懂衩,你每次對edittext進行setText操作后都會調(diào)用這個方法拳昌,不巧的是recyclerview是復用容器憨奸,數(shù)據(jù)超出可用的容器時零抬,會對edittext進行復用,也就是說题翻,我們本身只想在addTextChangedListener中去監(jiān)聽手動改變edittext的情況揩徊,而recyclerview重復調(diào)用setText也會導致默認調(diào)用addTextChangedListener而會產(chǎn)生嚴重的數(shù)據(jù)錯亂。

方法1 (還是有缺陷)來自于:[junerver] http://www.reibang.com/p/af820fb21e62

@Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        final AssessCheckListBean.CheckBean taskBean = dataList.get(position);
        holder.tv_check_title.setText(taskBean.getTeachername());
        /*RecyclerView中監(jiān)聽多個EditText變化的BUG
         *解決方案:在每次填充數(shù)據(jù)時嵌赠,先移除TextWatcher 監(jiān)聽器塑荒,然后為 EditText 填充數(shù)據(jù) ,最后在為 EditText 添加 TextWatcher 監(jiān)聽器姜挺;
         * */
        if (holder.et_check_score.getTag() instanceof TextWatcher) {
            holder.et_check_score.removeTextChangedListener((TextWatcher) holder.et_check_score.getTag());
        }
        holder.et_check_score.setText(taskBean.getTeacherscore() + "");
        TextWatcher watcher = new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {}

            @Override
            public void afterTextChanged(Editable s) {
                taskBean.setTeacherscore(holder.et_check_score.getText().toString());
            }
        };

        holder.et_check_score.addTextChangedListener(watcher);
        holder.et_check_score.setTag(watcher);
    }

方法2 (推薦)鏈接:http://www.reibang.com/p/19894620a0ec
個人更傾向第二種(emmm....因為優(yōu)雅)

      第二種就是給item種的EiditText注冊焦點監(jiān)聽

                1齿税、在有焦點時添加TextWatcher,失去焦點時添加TextWatcher炊豪,同時記錄當前焦點的位置focusPosition凌箕。

                2、TextWatcher的afterTextChanged()中把輸入數(shù)據(jù)存入SpareArray词渤。這里有個小坑牵舱,之前會在afterTextChanged() 又給EidtText設置文本,導致了OOM缺虐,完全沒必要芜壁,只要在對應item里獲取數(shù)組中相應位置數(shù)據(jù)即可。
image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末高氮,一起剝皮案震驚了整個濱河市慧妄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剪芍,老刑警劉巖塞淹,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異罪裹,居然都是意外死亡饱普,警方通過查閱死者的電腦和手機运挫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來费彼,“玉大人,你說我怎么就攤上這事口芍」坎” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵鬓椭,是天一觀的道長颠猴。 經(jīng)常有香客問我,道長小染,這世上最難降的妖魔是什么翘瓮? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮裤翩,結(jié)果婚禮上资盅,老公的妹妹穿的比我還像新娘。我一直安慰自己踊赠,他們只是感情好呵扛,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著筐带,像睡著了一般今穿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伦籍,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天蓝晒,我揣著相機與錄音,去河邊找鬼帖鸦。 笑死芝薇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的作儿。 我是一名探鬼主播剩燥,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼立倍!你這毒婦竟也來了灭红?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤口注,失蹤者是張志新(化名)和其女友劉穎变擒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寝志,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡娇斑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年策添,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毫缆。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡唯竹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出苦丁,到底是詐尸還是另有隱情浸颓,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布旺拉,位于F島的核電站产上,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛾狗。R本人自食惡果不足惜晋涣,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沉桌。 院中可真熱鬧谢鹊,春花似錦、人聲如沸留凭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冰抢。三九已至松嘶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挎扰,已是汗流浹背翠订。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遵倦,地道東北人尽超。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像梧躺,于是被迫代替她去往敵國和親似谁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355