在ListView中的ToggleButton,滚动时自动改变值

我有一个ListView的一些项目。 我在ListView的每一行都有toggleButton。 假设没有selecttoggleButtons。 滚动工作正常。 但是,当我检查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; } 

Solutions Collecting From Web of "在ListView中的ToggleButton,滚动时自动改变值"

这两个方法添加到您的BaseAdapter类。

  @Override public int getViewTypeCount() { //Count=Size of ArrayList. return Count; } @Override public int getItemViewType(int position) { return position; } 

您的答案是正确的,您需要跟踪每个button在列表元素之外的状态,因为他们确实被回收。 例如创build一个ArrayList,并在ArrayList中点击每个button的状态,在getView中,您可以查看ArrayList.get(possition)来确定button状态是否应该打开或closures。

我相信 – 纠正我,如果我错了 – 这是强制列表视图重复不重用视图(checkbox) 。

getView创buildcheckbox时,需要根据数据模型设置checkbox的状态。

重要

用户“Chirag Patel”在回答这个方法时提到过

public int getViewTypeCount()和public int getItemViewType(int position)修复像Tooglebutton自动启用状态检查真正的滚动.. 这是大错了 。如果你不想自动启用scrool只是做

 toogleButton.setChecked(false); 

在getView覆盖方法上。