android ListView:删除一行时如何通知数据源?
我在每行添加一个删除图像,因此当单击图像并删除此行时,以下代码为MyDapater:android ListView:删除一行时如何通知数据源?,android,listview,Android,Listview,我在每行添加一个删除图像,因此当单击图像并删除此行时,以下代码为MyDapater: public View getView(int position, View convertView, ViewGroup parent) { View view = null; LayoutInflater inflater = ((Activity) context).getLayoutInflater(); if (convertView == null) { v
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;
}
在活动中,我的数据是存储列表和以下代码:
adapter = new MyAdapter(this, _list);//
listView.setAdapter(adapter);
所以,当单击“删除图像”时,这一行将被删除。我的问题是:“活动”如何知道删除了哪一行?简而言之,它不知道
如果您想让活动知道删除了哪一行,您需要告诉它。我首选的方法是接口
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();
}
您可以在适配器构造函数中传递数据库对象,并在单击事件中从数据库中删除您的项。您的适配器是ArrayAdapter或BaseAdapter的子类吗?它不属于
活动。当你调用notifyDataSetChanged()
时,ListView
将通过调用getCount()
和getView()
刷新它的视图
…你正在从你提供给适配器的数据中删除一条记录以填充列表,因此,一旦你删除了数据中的一项,如果你使用更改为适配器的notify数据集,它不知道是否删除或添加了该项,它将根据你提供的数据在列表视图中填充该项。如果你熟悉getView()函数,你可以很容易地得出这个函数。BaseAdapter的子类。我有相同的观点。但我不知道我使用的ListView是否正确?