我在每行添加一个删除图像,因此当点击图像并删除此行时,以下代码为MyDapater:
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
if (convertView == null) {
view = inflater.inflate(R.layout.row, null);
ItemViewHolder holder = new ItemViewHolder();
...
holder.deleteImage = (ImageView) view.findViewById(R.id.delete_icon);
holder.deleteImage.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
int pos = (Integer)v.getTag();
_list.remove(pos); // _list is a List storage the data
notifyDataSetChanged();
}
});
view.setTag(holder);
} else {
view = convertView;
}
ItemViewHolder holder = (ItemViewHolder) view.getTag();
holder.deleteImage.setTag(Integer.valueOf(position));
return view;
}
并且在Activity中,我的数据是存储一个List和以下代码:
adapter = new MyAdapter(this, _list);//
listView.setAdapter(adapter);
所以,当点击删除图片时,这一行就会出现。我的问题是:活动如何知道删除哪一行?
答案 0 :(得分:1)
简而言之,它没有。
如果您希望活动知道哪些行被删除,您需要告诉它。我首选的方法是界面。
public interface DeleteListener{
public void rowDeleted(int pos);
}
并且活动应该实现它
public class myActivity extends Activity implements DeleteListener{
创建适配器时传递活动参考
adapter = new MyAdapter(this, _list, this);
并在适配器中触发删除事件
public MyAdapter(Context context, List _list, DeleteListener dListener){
//save the listener to a field
}
...
@Override
public void onClick(View v) {
int pos = (Integer)v.getTag();
_list.remove(pos); // _list is a List storage the data
dListener.rowDeleted(pos);
notifyDataSetChanged();
}
答案 1 :(得分:0)
您可以在适配器构造函数中传递数据库对象,并在单击事件中从数据库中删除您的项目。