我有一个ListView,每个都item包含一个ToggleButton.在我切换它然后向上或向下滚动之后,ListView正在回收视图,因此其他一些镜像正在镜像检查状态ToggleButton.我不想要这个.我该怎样预防呢?
Lil*_*ilo 78
将这两种方法添加到适配器.
@Override
public int getViewTypeCount() {                 
    return getCount();
}
@Override
public int getItemViewType(int position) {
    return position;
}
Xav*_*Gil 50
Android会回收列表项以达到性能目的.如果您希望ListView平滑滚动,强烈建议重复使用它们.
对于每个列表项,getView调用适配器的功能.在那里,您必须为ListView要求的项目分配值.
看看这个例子:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    ViewHolder holder = null;
    if ( convertView == null )
    {
        /* There is no view at this position, we create a new one. 
           In this case by inflating an xml layout */
        convertView = mInflater.inflate(R.layout.listview_item, null);  
        holder = new ViewHolder();
        holder.toggleOk = (ToggleButton) convertView.findViewById( R.id.togOk );
        convertView.setTag (holder);
    }
    else
    {
        /* We recycle a View that already exists */
        holder = (ViewHolder) convertView.getTag ();
    }
    // Once we have a reference to the View we are returning, we set its values.
    // Here is where you should set the ToggleButton value for this item!!!
    holder.toggleOk.setChecked( mToggles.get( position ) );
    return convertView;
}
请注意,这ViewHolder是我们用于回收该视图的静态类.它的属性是列表项的视图.它在您的适配器中声明.
static class ViewHolder{
    ToggleButton toggleOk;
}
mToggles 在适配器中声明为私有属性,并使用如下公共方法进行设置:
public void setToggleList( ArrayList<Boolean> list ){
        this.mToggles = list;
        notifyDataSetChanged();
    }
有关更多信息,请查看其他自定义ListView示例.
希望能帮助到你.
| 归档时间: | 
 | 
| 查看次数: | 42884 次 | 
| 最近记录: |