[英]How to delete item from listView with custom baseadapter
我遇到一个问题,我有一个列表视图,我想在单击按钮时从中删除一个项目。 我可以在互联网上找到示例,但我无法使它们正常工作。 我怎样才能做到这一点?
这是我的代码:
public class GroupRequestCustomAdapter extends BaseAdapter {
String [] result;
Context context;
String [] imageId;
String [] groupId;
private static LayoutInflater inflater=null;
public GroupRequestCustomAdapter(GroupRequests ListActivity, String[] prgmNameList, String[] prgmImages, String [] GroupId) {
// TODO Auto-generated constructor stub
result=prgmNameList;
context=ListActivity;
imageId=prgmImages;
groupId = GroupId;
inflater = ( LayoutInflater )context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return result.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public class Holder
{
TextView tv;
ImageView img;
Button accept;
Button decline;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
Holder holder=new Holder();
View rowView;
//Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), imageId[position]);
//Bitmap bitmap = getBitmapFromURL(imageId[position]);
rowView = inflater.inflate(R.layout.group_request_list, null);
holder.tv=(TextView) rowView.findViewById(R.id.textView1);
holder.img=(ImageView) rowView.findViewById(R.id.imageView1);
holder.tv.setText(result[position]);
holder.accept=(Button) rowView.findViewById(R.id.buttonAccept);
holder.decline=(Button) rowView.findViewById(R.id.buttonDecline);
if (holder.img != null) {
new GetImageFromUrl(holder.img,context).execute(imageId[position]);
}
holder.accept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v("Button click", "accept");
}
});
holder.decline.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v("Button click", "Decline");
}
});
return rowView;
}
}
您可以在适配器中添加方法来为您执行此操作:
public void deleteItem (int position) {
result.remove(position);
// remove(int) does not exist for arrays, you would have to write that method yourself or use a List instead of an array
notifyDataSetChanged();
}
public void deleteItem (String itemToDelete) {
result.remove(itemToDelete);
// remove(int) does not exist for arrays, you would have to write that method yourself or use a List instead of an array
notifyDataSetChanged();
}
顺便说一句,您的getItem(int position)
实现是错误的,它应该返回result.get(position)
。 getItemId
还应该返回一个有意义的id; 就您而言,我认为重返职位还可以。
编辑 :
我注意到您的构造函数需要3个不同的列表。 结果,您将很难处理数据集中的更改,因为如果从结果中删除一个项目,则也必须从其他列表中删除相应的项目。 我强烈建议您按照以下方式重新定义您的适配器:
public GroupRequestCustomAdapter(GroupRequests ListActivity, List<MyObject>)
MyObject是一个非常简单的类,包含ListView中一项的数据,例如:
public class MyObject {
private String prgmName;
private String prgmImage;
// other required fields.
// required getters/setters
}
这样,您只有一个List可以在适配器内部进行管理,而不是像现在那样管理result
, imageId
和groupId
。 并且可以在List上调用remove(int position)。
最后,您还可以考虑扩展ArrayAdapter而不是BaseAdapter
,它具有BaseAdapter
不具备的一些有用方法,包括...您猜对了: remove方法;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.