ListView混合edittexts

时间:2018-07-04 05:05:00

标签: android listview

我有一个s=b'/00/' with open("oldfile", "rb") as old, open("newfile", "wb") as new: new.write(s) for chunk in iter(lambda: old.read(1024), b""): new.write(chunk) listViewedittexts。我了解我需要存储有关每个项目的信息,以便在获取每个项目的视图时再次进行设置,因为它回收了checkboxes的Java对象。遵循这个想法,我为每种输入类型创建了一个列表。因此,我有一个view的字符串ArrayList和一个edittext的布尔值。 checkboxes在滚动时工作正常,但checkboxes却无法正常工作。

edittext

我提到列表视图在一个片段中的事实,但是我不认为这是问题。我不知道该说些什么,以帮助我/您找出解决方案... / p>

2 个答案:

答案 0 :(得分:1)

setXXX()不同,方法addTextChangedListener不会用新值替换旧值,而是每次调用时都会向EditText添加另一个TextWatcher。

因此,您需要先removeTextChangedListener再添加新的。但是要删除它,您必须将其存储在变量中。

解决方案:

  1. 使用ViewHolder模式。
  2. TextWatcher变量添加到ViewHolder
  3. 在添加新的TextWatcher之前,请删除旧的。
  4. 在创建新创建的TextWatcher之后将其写入ViewHolder,然后在addTextChangedListener中使用它。

或者使用ViewHolder,也可以只创建另一个List<TextWatcher>,然后在其中存储TextWatchers。

答案 1 :(得分:0)

position存在问题。在restore列表中设置值时使用的位置错误。利用setTag方法来保持职位

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.item, null);
        }

        final EditText input = convertView.findViewById(R.id.input);
        input.setTag(position);  //this will hold the actual position of view


        input.addTextChangedListener(new MyTextWatcher(input));

        input.setText(restore.get(position));

    }

    private class MyTextWatcher implements TextWatcher{

        EditText editText;
        public MyTextWatcher(EditText editText){
            this.editText = editText;
        }

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void afterTextChanged(Editable editable) {
            restore.set(editText.getTag(), editable.toString());  //here you use the position of view which is being edited
        }
    }