web-dev-qa-db-ja.com

リストビューのすべてのアイテムを削除する方法

私のアプリでは、ボタンをクリックすると、すべてのリストビュー項目を削除したいです。ここでは、リストビューにアイテムを追加するためにベースアダプターを使用しています。

リストビュー項目を動的に削除するにはどうすればよいですか。

33
naresh

setListAdapter()を再度呼び出します。今回は空のArrayListを使用します。

36
mah

ListViewは、Adapterの基になるデータに基づいて動作します。 ListViewをクリアするには、次の2つのことを行う必要があります。

  1. 設定したデータをアダプターから消去します。
  2. notifyDataSetChangedを呼び出してビューを更新します

たとえば、SampleAdapterを拡張する以下のBaseAdapterのスケルトンを参照してください。


public class SampleAdapter extends BaseAdapter {

    ArrayList<String> data;

    public SampleAdapter() {
        this.data = new ArrayList<String>();
    }

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

    public Object getItem(int position) {
        return data.get(position);
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {
        // your View
        return null;
    }
}

ここには、アダプターのデータとしてArrayList<String> dataがあります。 ArrayListを使用する必要はないかもしれませんが、ListViewのデータを表すためにコードに類似したものがあります。

次に、このデータをクリアするメソッドを提供します。このメソッドの実装は、基礎となるデータ構造をクリアすることです


public void clearData() {
    // clear the data
    data.clear();
}

Collection のサブクラスを使用している場合、上記のように使用できる clear() メソッドがあります。

このメソッドを取得したら、clearDatanotifyDataSetChangedonClickを呼び出します。したがって、onClickのコードは次のようになります。


// listView is your instance of your ListView
SampleAdapter sampleAdapter = (SampleAdapter)listView.getAdapter();
sampleAdapter.clearData();

// refresh the View
sampleAdapter.notifyDataSetChanged();
24
momo

listオブジェクトを使用してアダプターに渡した場合、Listオブジェクトから値を削除し、アダプターオブジェクトを使用してnotifyDataSetChanged()を呼び出すことができます。

例えば.

List<String> list = new ArrayList<String>();
ArrayAdapter adapter;


adapter = new ArrayAdapter<String>(DeleteManyTask.this, 
            Android.R.layout.simple_list_item_1,
            (String[])list.toArray(new String[0]));

listview = (ListView) findViewById(R.id.list);
listview.setAdapter(adapter);

listview.setAdapter(listAdapter);

削除するには、この方法で行います

list.remove(index); //or
list.clear();
adpater.notifyDataSetChanged();

またはリストオブジェクトなしでリストからアイテムを削除します。

adapter.clear();
adpater.notifyDataSetChanged();
10
Pratik

使用できるのは

 lv.setAdapter(null);
8
kksal55

あなたはこれを行うことができます:

listView.setAdapter(null);
4
codingpuss

私はこの声明を使用し、それは私のために働いた:

   setListAdapter(null)

これは、BaseAdapterを拡張するクラスで何もしないデフォルトコンストラクターを呼び出します。

4
Amt87

私はちょうどarraylistをきれいにし、values.clear()を試してください;

values = new ArrayList<String>();
values.clear();

ArrayAdapter <String> adapter;
adapter = new ArrayAdapter<String>(this, R.layout.list,Android.R.id.text1, values); 
lista.setAdapter(adapter);
3
SRD

以下のソリューションを試した後の別のアプローチ。明確にする必要がある場合は、リストを新しい明確な新しいリストに初期化するだけです。

List<ModelData> dataLists = new ArrayList<>();
                RaporAdapter adapter = new RaporAdapter(AyrintiliRapor.this, dataLists);
                listview.setAdapter(adapter);

または、必要に応じて表示/非表示を設定します

img_pdf.setVisibility(View.INVISIBLE);
0
Sam

adapterからデータを削除し、adapter.notifyDataSetChanged();を呼び出します

0
Vineet Shukla

私にとってこのように働いた:

private ListView yourListViewName;
private List<YourClassName> yourListName;

  ...

yourListName = new ArrayList<>();
yourAdapterName = new yourAdapterName(this, R.layout.your_layout_name, yourListName);

  ...

if (yourAdapterName.getCount() > 0) {
   yourAdapterName.clear();
   yourAdapterName.notifyDataSetChanged();
}

yourAdapterName.add(new YourClassName(yourParameter1, yourParameter2, ...));
yourListViewName.setAdapter(yourAdapterName);
0
Robert Pal

要件に合った以下のオプションのいずれかを使用します

listview.removeViews(1,listview.getChildCount());

または

listview.removeViewInLayout(your view);
0
Balaji.K