ListView 中添加EditText 的几个小问题

在Android开发中,ListView中使用EditText时会遇到一些问题,如文本错位、删除后无法更新Adapter等。本文总结了这些问题并提出了解决策略,包括避免EditText的afterTextChanged()方法中的空指针,处理hashMap.get(position)可能的空值,以及解决EditText修改后更新Adapter不生效的问题。针对最后一个问题,提出了销毁并重新加载页面的折中办法。

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

关于在ListView中的EditText 问题 网上真的是一大堆一大堆的 里面具体细节我没去细扣研究,如果我现在做android开发我一定花时间自己封装个可以ListView中 放的EditText ,这些都是题外话了,我这里是要说的 在ListView中放EditText 根据Hashmap 来确定对应位置上的值 需要注意的一些问题

我来总结下 主要的问题

  1. EditText 的afterTextChanged(Editable s)方法中的判空问题(不要加判空)
  2. hashMap.get(position)的判空问题(一定要有判空后的处理)
  3. EditText 修改完后 更新Adapter 不刷新EditText控件问题

1和2 都可以避免掉 3想了个折中的方法

下面来叙述下现象
1的现象就是如果EditText里面是1位的比如:

  • EditText中是1 你改成2 这种情况正常
  • EditText中是1 你删掉它就是改为”” 那样就错了 删不掉的

1的现象就是如果EditText里面是2位的或者2位以上 用2位做例子比如:

  • EditText中是11 你改成33 这种情况正常
  • EditText中是11 你改成3 这种情况错误 实际上得到的是13
  • EditText中是11 你删掉它就是改为” 这种情况错误 实际上得到的是1

2的现象 如果你没有判空后的处理那样 1的现象 中的 改为”” 没有改掉的现象仍然存在

3的现象 解决方法是 更新不了adapter 那就只能刷新整个页面了(这个我没有去尝试) 或者销毁这个页面在重新进来 我是销毁重新进来的
因为我这个页面只有ListView 并且我的ListView没有加刷新控件

代码如下:

    @Override
    public void initDataAndAdapterToView() {
        AppUtils.getInstance().showLoading(EditPoleNumActivity.this, "修改中....");
        mWifiAdmin = new WifiAdmin(this);
        hashMap = new HashMap<Integer, String>();
        mPoleDatas = new ArrayList<>();
        mAdapter = new CommonAdapter<PoleData>(this, mPoleDatas, R.layout.list_item_edit_pole) {
            @Override
            public void convertGetView(final ViewHolder viewHolder, final PoleData item) {
                TextView textView = (TextView) viewHolder.getView(R.id.txt_old_num);
                textView.setText(item.getPoleNumber());
                EditText editText = (EditText) viewHolder.getView(R.id.edi_new_num);
                editText.addTextChangedListener(new TextWatcher() {
                    @Override
                    public void onTextChanged(CharSequence s, int start, int before, int count) {

                    }

                    @Override
                    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                    }

                    @Override
                    public void afterTextChanged(Editable s) {
                        //将editText中改变的值设置的HashMap中
                        hashMap.put(viewHolder.getPosition(), s.toString());
                    }
                });
                if (!TextUtils.isEmpty(hashMap.get(viewHolder.getPosition()))) {
                    editText.setText(hashMap.get(viewHolder.getPosition()));
                    mPoleDatas.get(viewHolder.getPosition()).setNewPoleNum(hashMap.get(viewHolder.getPosition()));
                }else {
                    mPoleDatas.get(viewHolder.getPosition()).setNewPoleNum("");
                }
            }
        };
        mListEditPole.setAdapter(mAdapter);
        mEditPoleThread = new EditPoleThread();
        mEditPoleThread.start();
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值