我有ListView
个项目。我在ListView的每一行都有toggleButton。假设没有选择任何toggleButtons。滚动效果很好。但是当我检查toogleButton,然后滚动我的listView时,当所选的toggleButton的行向上移动时,最后一个toggleButton(未选中)会自动检查。这种模式还在继续。我认为它与重用listItems的行有关。
我在下面添加了适配器类,列表项加载
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View rowview = convertView;
if (null == rowview) {
rowview = inflator.inflate(R.layout.groupsettinglistitem, null);
SettingsGroupListItem viewholder=new SettingsGroupListItem();
viewholder.gpname=(TextView) rowview.findViewById(R.id.textView1);
viewholder.status=(ToggleButton) rowview.findViewById(R.id.ToggleButton1);
viewholder.status.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(v.getContext(), "click", Toast.LENGTH_SHORT);
}
});
rowview.setTag(viewholder);
}
SettingsGroupListItem holder=(SettingsGroupListItem) rowview.getTag();
holder.gpname.setText(items[position].getGpname().getText().toString());
rowview.setTag(holder);
return rowview;
}
答案 0 :(得分:13)
这两个方法会添加到BaseAdapter
课程中。
@Override
public int getViewTypeCount() {
//Count=Size of ArrayList.
return Count;
}
@Override
public int getItemViewType(int position) {
return position;
}
答案 1 :(得分:0)
你是对的,你需要跟踪每个按钮在列表元素之外的状态,因为它们会被回收。 例如,创建一个ArrayList,并在ArrayList中单击时为每个按钮设置状态,在getView中,您可以查看ArrayList.get(possition)以确定按钮状态是应该向上还是向下。
答案 2 :(得分:0)
我相信 - 如果我错了,请纠正我 - 这是Force Listview not to reuse views (Checkbox)的副本。
您需要在getView
中根据数据模型创建复选框时设置复选框的状态。
答案 3 :(得分:0)
<强> 重要 强>
用户“Chirag Patel”在回答该方法时提及
public int getViewTypeCount()和public int getItemViewType(int position)修复像Tooglebutton一样自动启用滚动状态检查true .. 这是大错误。如果你不想在scrool上自动启用就行了
toogleButton.setChecked(false);
on getView覆盖方法。