java - Adapter constructor of own implementation is not accepting hashMap.values() -
i implemented own adapter
arrayadapter<>
. within constructor using hashmap gets uuid key , random class called room. basically, smarthome app has rooms carry devices (fyi). however, implementation of constructor roomadapter
(found @ https://github.com/codepath/android_guides/wiki/using-an-arrayadapter-with-listview) using super() - method not take hashmaps.
code
public roomadapter(context context, hashmap<uuid, room> room) { super(context, r.layout.list_item_room, room.values()); }
i @ beginners stage java, don't know have for. tried converting collection received when call room.values()
arraylist used before tried use hashmap.
is there decent way fix problem @ position in code or have change code , use arraylist room
?
the reason hashmap#values()
not return arraylist
. returns collection<t>
object contains of values in map
. arraylist<t>
collection<t>
, collection<t>
not arraylist<t>
adapter not know collection. arraylist
, hashset
, vector
, linkedblockingqueue
or of number of objects extend collection
. may in fact custom implementation hashmap knows about. point doesn't matter underlying collection is, , hashmap doesn't make guarantees on return, that's interface you're stuck with.
you can fix code copying values in arraylist so:
super(context, r.layout.list_item_room, new arraylist(room.values()));
however, because hashmap there no guarantee order in put items same order receive them.
values in whatever arbitrary order hashmap decides put them in.
a more predictable hashmap implementation linkedhashmap may serve purposes.