我有一个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)
和listView
和edittexts
。我了解我需要存储有关每个项目的信息,以便在获取每个项目的视图时再次进行设置,因为它回收了checkboxes
的Java对象。遵循这个想法,我为每种输入类型创建了一个列表。因此,我有一个view
的字符串ArrayList
和一个edittext
的布尔值。 checkboxes
在滚动时工作正常,但checkboxes
却无法正常工作。
edittext
我提到列表视图在一个片段中的事实,但是我不认为这是问题。我不知道该说些什么,以帮助我/您找出解决方案... / p>
答案 0 :(得分:1)
与setXXX()
不同,方法addTextChangedListener
不会用新值替换旧值,而是每次调用时都会向EditText
添加另一个TextWatcher。
因此,您需要先removeTextChangedListener
再添加新的。但是要删除它,您必须将其存储在变量中。
解决方案:
ViewHolder
模式。TextWatcher
变量添加到ViewHolder
。TextWatcher
之前,请删除旧的。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
}
}