Android 解决在ListView历史复用中Edittext数据显示混乱

本文分享了一种在ListView中有效复用EditText的方法,通过将数据Bean与EditText绑定,实现了数据的实时更新与保存。核心步骤包括设置数据监听、清除输入框焦点及更新数据列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然网上有各种解决办法,但不一定适合自己使用的场景。

package com.ishop.merchantsmobile.ui.kpinew.assign;

import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;

import com.ishop.merchantsmobile.R;
import com.ishop.merchantsmobile.bean.kpinew.AssignDetailItemBean;
import com.ishop.merchantsmobile.bean.kpinew.PersonKpiBean;
import com.ishop.merchantsmobile.global.CEventBus;
import com.ishop.merchantsmobile.ui.base.EAdapter;
import com.ishop.merchantsmobile.ui.base.EViewHolder;
import com.ishop.merchantsmobile.utils.UIUtils;

import java.util.List;

public class PersonKpiAdapter extends EAdapter<PersonKpiBean> {

    public PersonKpiAdapter(List<PersonKpiBean> mList, Context mContext, int itemLayoutID) {
        super(mList, mContext, itemLayoutID);
    }

    @Override
    public void setView(EViewHolder holder, final PersonKpiBean item, final int position, View
            convertView, ViewGroup parent) {

        TextView tvPersonName = holder.getViewById(R.id.tvPersonName);
        tvPersonName.setText(item.getPersonName());
        final EditText etAmount = holder.getViewById(R.id.etAmount);
        etAmount.setText(item.getAmount());
        etAmount.setTag(item);//把Bean与输入框进行绑定
        etAmount.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) {
                UIUtils.save2Decimals(s, etAmount);
            }

            @Override
            public void afterTextChanged(Editable s) {
                if (etAmount.isFocused()) {
                    PersonKpiBean itemBean = (PersonKpiBean) etAmount.getTag();
                    itemBean.setAmount(etAmount.getText().toString());
                    refreshList(itemBean);
                }
            }
        });
        etAmount.clearFocus();//清除焦点
    }

    private void refreshList(PersonKpiBean itemBean) {
        for (int i = 0, len = mList.size(); i < len; i++) {
            PersonKpiBean item = mList.get(i);
            if (item.getPersonId().equals(itemBean.getPersonId())) {
                mList.set(i, itemBean);
                break;
            }
        }
    }
}

这是我主要解决ListView中复用EditText的核心代码:

1.etAmount.setTag(item);//把Bean与输入框进行绑定

2.PersonKpiBean itemBean = (PersonKpiBean) etAmount.getTag();// 取绑定的数据

3.etAmount.clearFocus();//清除焦点

4.if (etAmount.isFocused());// 有焦点时,才刷新数据

 

完美解决自己的应用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值