ListView与EditText冲突问题

本文探讨了在Android开发中ListView包含EditText时遇到的问题:EditText的addTextChangedListener监听事件被多次重复调用。提供了两种解决方案:一是禁用ListView缓存机制;二是利用EditText的OnFocusChangeListener来判断是否获取焦点后再进行监听事件的操作。

当ListView的item中包含EditText控件时,对EditText进行监听输入内容变化时,因为ListView的缓存机制,会导致EditText的addTextChangedListener监听事件会被多次重复调用。

解决方案一

不适用ListView的缓存机制

 @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View viewLine;
        TextView tv;
        LinearLayout ll;
        TextView tvChoose;
        EditText et;

        convertView = View.inflate(ctx, R.layout.item_child_msg, null);
        viewLine = convertView.findViewById(R.id.view);
        tv = (TextView) convertView.findViewById(R.id.tv_label);
        tvChoose = (TextView) convertView.findViewById(R.id.tv_choose);
        ll = (LinearLayout) convertView.findViewById(R.id.ll);
        et = (EditText) convertView.findViewById(R.id.et_value);

      return convertView;
    }

不建议这样使用

解决方案二

在EditText的OnFocusChangeListener监听事件中,通过焦点判断,在处于获取焦点再对EditText的addTextChangedListener监听事件进行操作

         holder.et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                        @Override
                        public void onFocusChange(View v, boolean hasFocus) {
                            if (hasFocus) {


                                finalHolder.et.addTextChangedListener(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) {
                                        
                                    }
                                });
                            }
                  
                        }
                    });

 

转载于:https://my.oschina.net/u/3704128/blog/1553963

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值