ListView 中添加EditText 的几个小问题

关于在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();
    }

猜你喜欢

转载自blog.csdn.net/shentanweilan9/article/details/79218787
今日推荐