How to call notifyDataSetChanged() from a generic Adapter
-
01-10-2019 - |
Question
An OnItemClickListener
for a ListView
has the following method:
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
I'd like to have the adapter behind the ListView
refresh, and I believe this is done through the use of:
BaseAdapter.notifyDataSetChanged()
How do I use the parent
parameter in the onItemClick
method to do this? So far I've tried:
parent.getAdapter().notifyDataSetChanged();
This throws an error because the object returned is of class HeaderViewListAdapter
, which for reasons unknown isn't a subclass of BaseAdapter
.
Solution
AFAIK, there isn't any method in HeaderListView for data refresh/reload. The only way I can think of doing this is to reassign the adapter.
OTHER TIPS
You can also get to the BaseAdapter via your custom adapter as show in the following code fragment:
public class HeaderViewListAdapter extends BaseAdapter {
...
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
...
}
This throws an error because the object returned is of class HeaderViewListAdapter, which for reasons unknown isn't a subclass of BaseAdapter.
((BaseAdapter) ((HeaderViewListAdapter)listView.getAdapter()).getWrappedAdapter()).notifyDataSetChanged();
You don't need to call any method to refresh your adapter client when you work with cursor.
Instead, after any operation you have to "Notify the changes" using getContentResolver().notifyChange(uri, null);
For example:
context.getContentResolver().update(SomeURI.CONTENT_URI, values, null,null);
context.getContentResolver().notifyChange(SomeURI.CONTENT_URI, null);
Your viewclient (Listview, Gridview, Whatever)
will change automatically even you're using a custom adapter or not.
Hope this help.
I found much easier way ..just call this.onCreate(null)
that will reload complete create method but the activity remains same .