我一直在寻找解决这个问题的几个小时但是我找不到对我的案例有用的东西这里是我的一个编辑文本的代码“我有两个” 问题:当我在列表中有足够的项目时,我需要向下/向上滚动项目,删除旧信息并用错误的信息替换它。
在我发布代码之前,我基本上有一个按钮“不在列表视图中”按下它时控制编辑文本:text.setFocusable(bool);
text.setFocusableInTouchMode(bool);
所以基本上用户可以编辑然后再次单击该按钮以删除edittext的背景,并使其表现得像textview。
现在这里是getview(..)
中的一个edittext的代码 if (convertView == null)
convertView = getActivity().getLayoutInflater().inflate(R.layout.listview_shopping, parent,false);
final EditText text = (EditText)convertView.findViewById(R.id.listview_shopping_items);
text.setText(item.getmName());
text.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
item.setmName(s.toString());
}
});
我删除了一些没用的代码,只需要很长时间。
问题在于textwatcher,当我删除它时它工作正常但我无法编辑任何东西!
我找到的两个解决方案:
1-摆脱回收,问题?它击中了表现。 2-摆脱textwatcher,问题?我无法编辑文本编辑:
我使用其他东西来编辑文本而不是我以前的方式,只需启用长按并弹出一个对话框并从那里控制所有内容,虽然它没有旧方法那么快但我找不到解决方案除了使用onLongClick(..):(
答案 0 :(得分:0)
问题是由于convertView
重复使用了视图。每当convertView为null时,您都要设置正确的值。但是,你缺少的是当convertView不为null时,你没有做到
任何东西。当convertView不为null时,表示视图已经存在,您不需要再次对其进行充气。但是您仍然需要将值设置为视图,否则将显示错误的数据,因为来自其他位置的视图将在此处重复使用。
所以,基本上你需要做的是在convertView为null时对其进行膨胀,并在所有情况下将数据设置为视图。
if (convertView == null) {
convertView = getActivity().getLayoutInflater().inflate(R.layout.listview_shopping, parent,false);
}
final EditText text = (EditText)convertView.findViewById(R.id.listview_shopping_items);
text.setText(item.getmName());
text.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
item.setmName(s.toString());
}
});