【发布时间】:2012-09-10 23:26:18
【问题描述】:
我有一个列表视图,每行包含一些文本和一个删除按钮。 当按下删除按钮时,该行必须被删除。
我正在使用基本适配器,并且有一个全局列表,其中的项目将被显示。
请在下面查看我的适配器代码
public class JobCartListAdapter extends BaseAdapter {
protected LayoutInflater mInflater;
public JobCartListAdapter( Context mContext) {
super();
this.mContext = mContext;
mInflater = LayoutInflater.from(mContext);
}
Context mContext;
@Override
public int getCount() {
// TODO Auto-generated method stub
return JobsManager.JobsCartList.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.job_cart_row, null);
holder = new ViewHolder();
holder.text1 = (TextView) convertView.findViewById(R.id.title);
holder.delete = (ImageButton)convertView.findViewById(R.id.delete);
holder.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("Remove from" , "" + position);
JobsManager.JobsCartList.remove(position) ;
notifyDataSetChanged();
}
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text1.setText(JobsManager.JobsCartList.get(position).getTitle());
return convertView;
}
static class ViewHolder {
TextView text1;
ImageButton delete;
}
}
我面临的问题是:
当我第一次按删除时,列表中的位置是正确的,项目被删除并且列表正在刷新
当我再次单击刷新列表中的一行时,传递给 getview 的相应位置不正确。因此,它导致索引超出范围异常,因为该位置用作 list 的索引。我检查了我的列表,它在 add 和 remove 上正确更新。 它是列表适配器的问题。调用 notifystatechanged 刷新列表后,点击某行时,返回的行位置不正确。
请帮忙
【问题讨论】: