在自定义BaseAdapter中使用ArrayList删除ListView项位置错误的问题,可能是由于以下几个原因导致的:
针对以上问题,可以参考以下步骤来解决:
下面是一个示例代码,演示如何在自定义BaseAdapter中正确删除ListView项:
public class MyAdapter extends BaseAdapter {
private ArrayList<String> mData;
private Context mContext;
public MyAdapter(Context context, ArrayList<String> data) {
mContext = context;
mData = data;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
holder = new ViewHolder();
holder.textView = convertView.findViewById(R.id.text_view);
holder.deleteButton = convertView.findViewById(R.id.delete_button);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(mData.get(position));
holder.deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 删除项
mData.remove(position);
notifyDataSetChanged();
}
});
return convertView;
}
private static class ViewHolder {
TextView textView;
Button deleteButton;
}
}
在这个示例中,我们通过点击删除按钮来删除ListView中的项。在点击事件中,我们首先使用ArrayList的remove()方法删除指定位置的项,然后调用BaseAdapter的notifyDataSetChanged()方法刷新ListView。这样就能够正确地删除ListView项,并保持数据源和显示数据的同步。
希望以上解答能够帮助到您!如果您对云计算或其他相关领域有更多问题,欢迎继续提问。
领取专属 10元无门槛券
手把手带您无忧上云