9

BaseAdapterを拡張して、カスタムリストビュー行を作成しています。ユーザーが行を保持するたびに開き、削除するかどうかを確認するコンテキストメニューがあります。ただし、行を削除するにはどうすればよいですか?ハッシュマップはテストデータのみです。

private MyListAdapter myListAdapter;
private ArrayList<HashMap<String, String>> items;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    items = new ArrayList<HashMap<String,String>>();
    HashMap<String, String> map1 = new HashMap<String, String>();
    map1.put("date", "10/09/2011");
    map1.put("distance", "309 km");
    map1.put("duration", "1t 45min");
    items.add(map1);

    myListAdapter = new MyListAdapter(this, items);
    setListAdapter(myListAdapter);
    getListView().setOnCreateContextMenuListener(this);
}


private class MyListAdapter extends BaseAdapter {

    private Context context;
    private ArrayList<HashMap<String, String>> items;

    public MyListAdapter(Context context, ArrayList<HashMap<String, String>> items) {
        this.context = context;
        this.items = items;
    }

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

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

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

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

        View view = convertView;

        if (view == null) {
            LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.row_log, null);
        }

        TextView rowLogOverview = (TextView) view.findViewById(R.id.rowLogOverview);

        HashMap<String, String> item = items.get(position);
        rowLogOverview.setText(item.get("date"));

        return view;
    }
}
4

5 に答える 5

17

アダプタから削除しないでください!アイテムから削除します ! アダプターはアイテムとビューの間にあります。ビューから位置を取得し、位置に応じてアイテムを削除できます。次に、アダプターはビューを更新します。

つまり、このようなことをする必要があります

 items.remove(position);
adapter.notifyDataSetChanged()
于 2011-09-10T14:37:22.567 に答える
11

削除するには、次の 2 つのことを行う必要があります。

  1. .remove()ArrayList (項目) を呼び出します。
  2. .notifyDataSetChanged()クラスのインスタンスを呼び出しますMyListAdapter( mListAdapter)。
于 2011-09-10T14:42:24.500 に答える
1
  1. アイテムからアイテムを削除
  2. コールBaseAdapter.notifyDataSetChanged()。次に、リストビューが再描画され、ターゲット行が画面から削除されます。
于 2011-09-10T14:37:40.287 に答える
0

BaseAdapter に次のコードを追加します。

public View getView(final int position, View convertView, ViewGroup parent) {
    View v = convertView;

    LayoutInflater layoutInflater = LayoutInflater.from(this.context);
    v = layoutInflater.inflate(R.layout.items, null);

    TextView buttonDelete = (TextView) v.findViewById(R.id.buttonDelete);
    buttonDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            item.remove(position);
            notifyDataSetChanged();
        }
    });
    return v;
}
于 2020-11-02T14:34:54.960 に答える