虽然网上有各种解决办法,但不一定适合自己使用的场景。
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());// 有焦点时,才刷新数据
完美解决自己的应用场景。