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();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章