Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android ListView:删除一行时如何通知数据源?_Android_Listview - Fatal编程技术网

android ListView:删除一行时如何通知数据源?

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

我在每行添加一个删除图像,因此当单击图像并删除此行时,以下代码为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;
}
在活动中,我的数据是存储列表和以下代码:

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是否正确?