document.write("");

Android Adapter中组件EditText文本变化监听 addTextChangedListener

问题背景:使用适配器显示一个列表,列表中Item中有EditText,滚动时会有EditText组件内容消失

步骤:

1. 在Adapter中,添加interface

1
2
3
4
5
6
7
8
9
10
public interface OnEidtTextChangeListener {
        void xxxTextChanged(CharSequence s, int start, int before, int count);
        void getXxxEditedCount();
}
 
private OnEidtTextChangeListener mOnEidtTextChangeListener;
 
public void setOnEidtTextChangeListener(OnEidtTextChangeListener mOnEidtTextChangeListener) {
        this.mOnEidtTextChangeListener = mOnEidtTextChangeListener;
}

2. 在XXXAdapter类中 实现自定义TextWatcher,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class XXXEditTextWatcher implements TextWatcher {
 
        private XXXAdapter.ItemViewHolder holder;
        //传入对应的ViewHolder
        public XXXEditTextWatcher(XXXAdapter.ItemViewHolder holder) {
                this.holder = holder;
        }
 
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (mOnEidtTextChangeListener != null) {
                        mOnEidtTextChangeListener.xxxTextChanged(s, start, before, count);
                }
        }
 
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
 
        }
 
        @Override
        public void afterTextChanged(Editable editable) {
                //通过ViewHolder,获取对应控件设置的tag,tag为当前的位置,即数据的position,获取适配器的数据list改变 XXX 的内容
                int position = (Integer) holder.etXXX.getTag();
                if (mList.size() > position) {
                        mList.get(position).setXXX(editable.toString());
                }
                // 获取当前显示的item的index
                if (mList.size() > 0) {
                        if (mOnEidtTextChangeListener != null) {
                                mOnEidtTextChangeListener.getXxxEditedCount();
                        }
                }
        }
}

3. 在onBindViewHolder中,组件设定tag以便于后续获取position,

1
2
3
holder.etXXX.setTag(position);
holder.etXXX.setText(mList.get(position).getXxx());
holder.etXXX.addTextChangedListener(new XXXEditTextWatcher(holder));

 

posted @   人间春风意  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-06-07 nacos 注册服务正常,服务列表内没有服务
点击右上角即可分享
微信分享提示

距今时间:
1025天8.00 小时 52.34 分钟

当前新增阅读数:140327