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

时间:2012-03-25 18:15:01

标签: android android-listview togglebutton

我有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;
}

4 个答案:

答案 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覆盖方法。