1

我有一个实现 ListAdapter 的适配器,

我在列表项目上有一个按钮,当我单击该按钮时,该项目将从数据中删除,从列表中删除该项目后,我想刷新列表,

notifyDataSetChanged() 方法在 ListAdapter 中不可用

编辑:

public class ShoppingListAdapter implements ListAdapter {

ArrayList<ProductInfoDTO> data;
private LayoutInflater inflater = null;
Context context;
Activity activity;
String TAG = getClass().getSimpleName();

DBQuery mDBQuery;

public ShoppingListAdapter(Context context, ArrayList<ProductInfoDTO> data) {

    this.context = context;
    this.data = data;
    activity = (Activity) context;
    inflater = ((Activity) context).getLayoutInflater();

    mDBQuery = new DBQuery(context);
}

@Override
public int getCount() {
    return data.size();
}

@Override
public Object getItem(int position) {

    return data.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position) {
    return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {   

    MyCartItemView view = null;

    if (convertView == null) {
        view = new MyCartItemView(activity, data.get(position));
    } else {
        view = (MyCartItemView) convertView;
    }
    view.setPosition(position);

    Button delete;

    delete = (Button) view.findViewById(R.id.delete);

    delete.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Toast.makeText(context, "delete clicked", Toast.LENGTH_SHORT)
                    .show();

            // delete from database
            mDBQuery.DeleteCartData(data.get(position).cart_id);

            // delete from data
            data.remove(data.get(position));

            // now I want to refresh the list here                              

        }
    });


    return view;
}

@Override
public int getViewTypeCount() {
    return data.size();
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public boolean isEmpty() {
    return false;
}

@Override
public void registerDataSetObserver(DataSetObserver observer) {

}

@Override
public void unregisterDataSetObserver(DataSetObserver observer) {

}

@Override
public boolean areAllItemsEnabled() {
    return true;
}

@Override
public boolean isEnabled(int position) {
    return true;
}
}
4

4 回答 4

2

而不是使用ListAdapter扩展你的 Adapterwith BaseAdapter。然后你就可以使用了notifyDataSetChanged


编辑: 请参阅下文。

https://stackoverflow.com/a/13431786/1995735

于 2013-06-27T09:53:11.870 回答
0

尝试使用

public class ShoppingListAdapter extends BaseAdapter {
    // add unimplemented methods...
}

而不是public class ShoppingListAdapter implements ListAdapter{}. 如果有错误,请告诉我们错误说明了什么。

于 2013-06-27T10:29:08.073 回答
0

试试这个代码..

delete.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

        Toast.makeText(context, "delete clicked", Toast.LENGTH_SHORT)
                .show();

        // delete from database
        mDBQuery.DeleteCartData(data.get(position).cart_id);

        // delete from data
        data.remove(data.get(position));

    your_listview.invalidateViews(); //refresh the list here                              

    }
});
于 2013-06-27T11:23:56.057 回答
0

该特定方法调用 DataSetObserver。您可以非常轻松地重新创建相同的方法。您应该参考 BaseAdapter 的源代码以查看 ListAdapter 接口的实现。你可以在grepcode找到它。您还应该在代码中包含一个 add(object) 方法,以使其更具响应性和可重用性。

实现 DataSetObserver

public class YourClass extends Something implements ListAdapter{
     private final DataSetObservable mObservable = new DataSetObservable();
     @Override
    public void registerDataSetObserver(DataSetObserver observer) {
        mObservable.registerObserver(observer);
    }

    @Override
    public void unregisterDataSetObserver(DataSetObserver observer) {
        mObservable.unregisterObserver(observer);
    }
    public void notifyDataSetChanged(){
        mObservable.notifyChanged();
    }
    public void notifyDataSetInvalidated(){
        mObservable.notifyInvalidated();
    }

添加添加方法

public void add(YourDataType object){ data.add(object);}

真正的乐趣开始让它成为一个真正的可过滤适配器,您应该查看 ArrayAdapter 的 grepcode 并查看涉及的所有内容。关于 android 的最好的事情之一就是开源。因此,当有疑问时阅读。变量是不言自明的,注释是一流的。

于 2016-01-28T08:41:05.323 回答