我有一个包含ImgaeView的ListItem。 我想在单击其图像或图标时删除ListItem。 这是我的ListItemActivity。 如何调用适配器的remove方法来删除ListItem? 我有引用的问题。 如果有更好的方法,请告诉我。
public class TaskListItem extends LinearLayout {
private Task task;
private TextView taskName;
private TextView responsible;
private TextView priority;
private ImageView bin;
protected TaskListAdapter adapter;
public TaskListItem(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
taskName = (TextView)findViewById(R.id.task_name);
responsible = (TextView)findViewById(R.id.responsible);
priority = (TextView)findViewById(R.id.priority);
bin = (ImageView)findViewById(R.id.remove_task);
}
public void setTask( final Task task) {
this.task = task;
taskName.setText(task.getName() + " ");
//Set responsibility text
responsible.setText("Resp: " + task.getReponsible());
//Set priority text
priority.setText(" Prio: " + task.getPiotiry());
/*
* onClickListener for image to delete
*/
bin.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
**call the adapters remove method to delete this item with parameter (this).**
}
});
}
public Task getTask() {
return task;
}
}
答案 0 :(得分:1)
如果您只想在ListView上隐藏它,可以使用:
TaskListItem.this.setVisibility(View.GONE);
如果要从列表中删除它,您需要在适配器的数据源中放置此项目位置。
您可以在适配器的getView()方法中创建onClickListener并将其分配给ImageView。 它看起来像这样:
public class MyAdapter extends BaseAdapter{
List<Task> mData = null;
public MyAdapter(List<Task> dataSource){
mData = dataSource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ...
final Tast task = getItem(position);
TaskListItem listItem = new TaskListItem();
listItem.setTask(task);
listItem.bin.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
mData.remove(task); // or mData.remove(position);
// might need to call notifyDataSetChanged() depending on the adapter you're using
}
};
return listItem;
}
}
答案 1 :(得分:0)
您希望从包含该列表的活动中点击列表项,例如在list.setOnListItemClick()的回调内或ListActivtiy的onListItemClick中。
当您获得click事件时,则调用adapter.remove(index)。