I have a Product Class, Which has three fields:-
- id
- name
- price
In my code I create a List<Product> productList = Collections.synchronizedList(new ArrayList<Product>());
This product list is used to create a ArrayAdapter<Product> adapter = ArrayAdapter<Product>(), I fill the productList in a separate thread and adapter is notified accordingly. It is working absolutely fine.
Now,
- I want to change the color of the some specific products (say for price < 1000).
- Each row of ListView should contain 4 elements product image,name, desc and price.
- When User clicks the Product, in a context menu options i.e. buy Product, View Product should be displayed.
I have read few blogs and threads related to that. Still I cant decide where to begin, I read about the customization of the ArrayAdapter, overriding getView(), custom list filters etc. Which way will be the best for my requirement… in other words How can custom adapters and list filters benefit me ?
You should extend BaseAdapter and provide your own layout for each item (getView()). Don’t forget to manage the view recycling and maybe use the ViewHolder paradigm.
EDIT
I didn’t use a lot the ListAdpater, because it binds to a ListView only. Sometimes I need an adapter for a GridView, and the BaseAdapter gives me enough freedom for all use cases.
Example of BaseAdapter:
You can use it with an Activity containing a ListView or a ListActivity (having in its layout a ListView with a special id):
This way, your ListActivity that will inflate the view will be able to make a findViewById() call and getListView() will return this internal listView. It’s a small hack, you can put your own listView with another id and make the findViewById() yourself. For The ListActivity, there’s another hack: if the ListActivity finds an empty view with again a special id, it will be shown when the list is empty:
Then on your listView, whether you used an Activity or ListActivity, you can set your adapter on the ListView: