How to remove listview all items
In my app, if you click on a button then i want to remove all the listview items开发者_如何学运维. Here, i am using the base adapter for adding the items to the list view.
How can i remove the listview items dynamically.
Call setListAdapter()
again. This time with an empty ArrayList.
ListView
operates based on the underlying data in the Adapter
. In order to clear the ListView
you need to do two things:
- Clear the data that you set from adapter.
- Refresh the view by calling
notifyDataSetChanged
For example, see the skeleton of SampleAdapter
below that extends the 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;
}
}
Here you have the ArrayList<String> data
as the data for your Adapter. While you might not necessary use ArrayList, you will have something similar in your code to represent the data in your ListView
Next you provide a method to clear this data, the implementation of this method is to clear the underlying data structure
public void clearData() {
// clear the data
data.clear();
}
If you are using any subclass of Collection, they will have clear() method that you could use as above.
Once you have this method, you want to call clearData
and notifyDataSetChanged
on your onClick
thus the code for onClick
will look something like:
// listView is your instance of your ListView
SampleAdapter sampleAdapter = (SampleAdapter)listView.getAdapter();
sampleAdapter.clearData();
// refresh the View
sampleAdapter.notifyDataSetChanged();
if you used List object and passed to the adapter you can remove the value from the List object and than call the notifyDataSetChanged() using adapter object.
for e.g.
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);
for remove do this way
list.remove(index); //or
list.clear();
adpater.notifyDataSetChanged();
or without list object remove item from list.
adapter.clear();
adpater.notifyDataSetChanged();
You can only use
lv.setAdapter(null);
You can do this:
listView.setAdapter(null);
I used this statement and it worked for me:
setListAdapter(null)
This one calls a default constructor that does nothing in a class extends BaseAdapter.
I just clean the arraylist , try 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);
Remove the data from the adapter
and call adapter.notifyDataSetChanged();
use any one of the bellow options which suites your requirement
listview.removeViews(1,listview.getChildCount());
or
listview.removeViewInLayout(your view);
An other approach after trying the solutions below. When you need it clear, just initialise your list to new clear new list.
List<ModelData> dataLists = new ArrayList<>();
RaporAdapter adapter = new RaporAdapter(AyrintiliRapor.this, dataLists);
listview.setAdapter(adapter);
Or set visibility to Gone / Invisible up to need
img_pdf.setVisibility(View.INVISIBLE);
For me worked this way:
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);
//very simple
adapter.clear();
精彩评论