我有一个ListView,每个都item包含一个ToggleButton.在我切换它然后向上或向下滚动之后,ListView正在回收视图,因此其他一些镜像正在镜像检查状态ToggleButton.我不想要这个.我该怎样预防呢?
Lil*_*ilo 78
将这两种方法添加到适配器.
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这ViewHolder是我们用于回收该视图的静态类.它的属性是列表项的视图.它在您的适配器中声明.
static class ViewHolder{
ToggleButton toggleOk;
}
Run Code Online (Sandbox Code Playgroud)
mToggles 在适配器中声明为私有属性,并使用如下公共方法进行设置:
public void setToggleList( ArrayList<Boolean> list ){
this.mToggles = list;
notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看其他自定义ListView示例.
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
42884 次 |
| 最近记录: |