我有一个从SimpleCursorAdapter扩展的自定义适配器。使用这个我绑定一个ListView,其中包含一个复选框和两个文本框。打开活动时,列表显示正常。但是单击复选框并在文本框中输入一些文本并向下滚动,然后再向上,数据将消失。
事实上,即使已经检查过,任何更改都会消失。我取消选中它们,然后向下滚动,返回检查。所以基本上,他们会回到原来的状态。
任何想法为什么?感谢。
答案 0 :(得分:4)
你需要在列表中有每个项目状态的arraylist,然后在每次加载列表项视图时加载这些状态。通过覆盖适配器中的GetView()方法并将保存的状态添加到基于项目位置的列表
答案 1 :(得分:2)
每次列表向上或向下滚动时,Listview都会重新创建其视图。你需要有一些模型类,它可以保存你的复选框和文本框在内存中的状态,以防一些更改(对于那个特定的行),然后在视图上显示它。
正如本文其他答案中所提到的,您可以使用getview以编程方式将存储在模型类中的值基于列表视图位置引导到您的视图中。
像这样的东西
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView " + position + " " + convertView);
ViewHolder holder = null;
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.item1, null);
holder = new ViewHolder();
holder.textView = (TextView)convertView.findViewById(R.id.text);
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
// Pass on the value to your text view like this. You can do it similarly for a check box as well
holder.textView.setText(mData.get(position));
return convertView;
}
答案 2 :(得分:0)
Android不会一次呈现所有ListView
条目,而只会呈现屏幕上可见的条目。当“新”List-Rows进入视图时
public View getView(int position, View convertView, ViewGroup parent)
调用Adapter
的方法并重新创建视图。
要填写以前保存的值,probalby必须覆盖getView
方法。