IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 解决lietview列表item的edittext显示混乱问题 -> 正文阅读

[移动开发]解决lietview列表item的edittext显示混乱问题

?核心代码1


        viewHolder.etPlanCount.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) {
                // 根据EditText的标签,更新数据源中的数据
                int pos = (int) viewHolder.etPlanCount.getTag();
                int count = s.toString().equals("") ? 0 : Integer.parseInt(s.toString());
                mPlanScanProductInfoList.get(pos).setPlanCount(count);
 
                onInputTextListener.afterChangedText(mPlanScanProductInfoList.get(pos).getProductNo(), count + "");
            }
        });

注意事项: 编辑框设置tag要在holder为null的?判断里添加(好像不是,再试试)

?参考:?

参考 :android ListView与EditText共存错位 - 冷冷汤圆 - 博客园

public class OutNoBillProductAdapter extends BaseAdapter {
    /* 输入文本以后获取文本的监听事件 */
    private OnInputTextListener onInputTextListener;
 
    public interface OnInputTextListener {
        void afterChangedText(String productNo, String text);
    }
 
    /* 适配器 */
    private Context mContext;
    private List<PlanScanProductInfo> mPlanScanProductInfoList;
 
    public OutNoBillProductAdapter(Context context, List<PlanScanProductInfo> planScanProductInfoList, OnInputTextListener onInputTextListener) {
        this.mContext = context;
        this.mPlanScanProductInfoList = planScanProductInfoList;
        this.onInputTextListener = onInputTextListener;
    }
 
    @Override
    public int getCount() {
        return mPlanScanProductInfoList != null ? mPlanScanProductInfoList.size() : 0;
    }
 
    @Override
    public Object getItem(int position) {
        return mPlanScanProductInfoList != null ? mPlanScanProductInfoList.get(position) : null;
    }
 
    @Override
    public long getItemId(int position) {
        return 0;
    }
 
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
        if (convertView != null) {
            viewHolder = (ViewHolder) convertView.getTag();
        } else {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.fragment_out_not_bill_item, null);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        }
 
        viewHolder.tvProductNo.setText(mPlanScanProductInfoList.get(position).getProductNo());
        viewHolder.tvProductName.setText(mPlanScanProductInfoList.get(position).getProductName());
 
        // 在滑动的过程中,给每一个EditText设置其唯一的标签,动态的将item与position进行绑定,以便于监听的EditText文本内容改变,当内容改变时可以根据该标签去更新数据源中相应位置中数据。
        viewHolder.etPlanCount.setTag(position);
        viewHolder.etPlanCount.clearFocus();
 
        viewHolder.etPlanCount.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) {
                // 根据EditText的标签,更新数据源中的数据
                int pos = (int) viewHolder.etPlanCount.getTag();
                int count = s.toString().equals("") ? 0 : Integer.parseInt(s.toString());
                mPlanScanProductInfoList.get(pos).setPlanCount(count);
 
                onInputTextListener.afterChangedText(mPlanScanProductInfoList.get(pos).getProductNo(), count + "");
            }
        });
 
        viewHolder.etPlanCount.setText(mPlanScanProductInfoList.get(position).getPlanCount() + "");
        // 光标定位到内容之后
        viewHolder.etPlanCount.setSelection(String.valueOf(mPlanScanProductInfoList.get(position).getPlanCount()).length());
 
        return convertView;
    }
 
    final class ViewHolder {
        public TextView tvProductNo, tvProductName;
        public EditText etPlanCount;
 
        public ViewHolder(View view) {
            tvProductNo = view.findViewById(R.id.tv_product_no);
            tvProductName = view.findViewById(R.id.tv_product_name);
            etPlanCount = view.findViewById(R.id.et_plan_count);
        }
    }
	
	 private abstract class MyTextWatcher implements TextWatcher{
        private ViewHolder mHolder;
        
        public MyTextWatcher(ViewHolder holder) {
            this.mHolder=holder;
        }
        
        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
        }
        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
        }
        @Override
        public void afterTextChanged(Editable s) {
            afterTextChanged(s, mHolder);
        }
        public abstract void afterTextChanged(Editable s,ViewHolder holder);
    }
}

实际操作:

ViewHolder holder = null;
        if (convertView == null) {
            convertView = UIUtils.inflate(R.layout.adp_item_tank);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
            holder.adpItemGasolineNum.setTag(position);
        holder.adpItemNameTank.setText((position + 1) + "号油罐");
        holder.adpItemRg.check(StringUtils.equals(oiltanks.get(position).getOli_type(), "柴油") ? R.id.adp_item_rb_diesel : R.id.adp_item_rb_gasoline);
        oiltanks.get(position).setOli_type(holder.mainRbDiesel.isChecked() ? "柴油" : "汽油");
        holder.adpItemGasolineNum.setText(StringUtil.valueOf(oiltanks.get(position).getGuanCapacity()));
        holder.adpItemGasolineNum.addTextChangedListener(new MyTextWatcher(holder) {
            @Override
            public void afterTextChanged(Editable s, ViewHolder holder) {
                int position=(Integer) holder.adpItemGasolineNum.getTag();
                oiltanks.get(position).setGuanCapacity(s.toString().trim());
            }
        });
        return convertView;

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 13:55:57  更:2021-12-08 13:57:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:45:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码