私のアプリでは、ボタンをクリックすると、すべてのリストビュー項目を削除したいです。ここでは、リストビューにアイテムを追加するためにベースアダプターを使用しています。
リストビュー項目を動的に削除するにはどうすればよいですか。
setListAdapter()
を再度呼び出します。今回は空のArrayListを使用します。
ListView
は、Adapter
の基になるデータに基づいて動作します。 ListView
をクリアするには、次の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() メソッドがあります。
このメソッドを取得したら、clearData
でnotifyDataSetChanged
とonClick
を呼び出します。したがって、onClick
のコードは次のようになります。
// listView is your instance of your ListView
SampleAdapter sampleAdapter = (SampleAdapter)listView.getAdapter();
sampleAdapter.clearData();
// refresh the View
sampleAdapter.notifyDataSetChanged();
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();
使用できるのは
lv.setAdapter(null);
あなたはこれを行うことができます:
listView.setAdapter(null);
私はこの声明を使用し、それは私のために働いた:
setListAdapter(null)
これは、BaseAdapterを拡張するクラスで何もしないデフォルトコンストラクターを呼び出します。
私はちょうど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);
以下のソリューションを試した後の別のアプローチ。明確にする必要がある場合は、リストを新しい明確な新しいリストに初期化するだけです。
List<ModelData> dataLists = new ArrayList<>();
RaporAdapter adapter = new RaporAdapter(AyrintiliRapor.this, dataLists);
listview.setAdapter(adapter);
または、必要に応じて表示/非表示を設定します
img_pdf.setVisibility(View.INVISIBLE);
adapter
からデータを削除し、adapter.notifyDataSetChanged();
を呼び出します
私にとってこのように働いた:
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);
要件に合った以下のオプションのいずれかを使用します
listview.removeViews(1,listview.getChildCount());
または
listview.removeViewInLayout(your view);