1

ListAdapter を実装するアダプタがあります。

リストの項目に 1 つのボタンがあります。そのボタンをクリックすると、その項目がデータから削除されます。リストからその項目を削除した後、リストを更新したいのですが、

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

を使用する代わりに、 withをListAdapter拡張します 。その後、使用するようになります。AdapterBaseAdapternotifyDataSetChanged


編集: 以下を参照してください。

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

于 2013-06-27T09:53:11.870 に答える
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 を呼び出します。同じ方法を非常に簡単に再現できます。ListAdapter インターフェイスの実装を確認するには、BaseAdapter のソース コードを参照してください。ここの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();
    }

add メソッドの追加

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

本当の楽しみは、ArrayAdapter の grepcode を見て、関連するすべてを確認する必要がある、フィルター可能な実際のアダプターにすることから始まります。Android の最も優れた点の 1 つは、オープン ソースです。ですから、迷ったときは読んでください。変数は自明であり、メモは一流です。

于 2016-01-28T08:41:05.323 に答える