diff -r 12fdfd2038d4 -r 641f11cdd319 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomListAdapter.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomListAdapter.java Sat Jul 21 14:56:52 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomListAdapter.java Mon Jul 23 00:17:06 2012 +0200 @@ -1,25 +1,36 @@ package org.hedgewars.hedgeroid.netplay; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.Map; import org.hedgewars.hedgeroid.R; -import org.hedgewars.hedgeroid.netplay.RoomList.Observer; import android.content.Context; import android.content.res.Resources; +import android.database.DataSetObserver; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; -public class RoomListAdapter extends BaseAdapter implements Observer { +public class RoomListAdapter extends BaseAdapter { private List rooms = new ArrayList(); private Context context; + private RoomList roomList; + + private DataSetObserver observer = new DataSetObserver() { + @Override + public void onChanged() { + reloadFromList(roomList); + } + + @Override + public void onInvalidated() { + invalidate(); + } + }; public RoomListAdapter(Context context) { this.context = context; @@ -29,7 +40,7 @@ return rooms.size(); } - public Object getItem(int position) { + public Room getItem(int position) { return rooms.get(position); } @@ -41,9 +52,27 @@ return true; } - public void setList(Collection rooms) { - this.rooms = new ArrayList(rooms); - Collections.reverse(this.rooms); // We want to show the newest rooms first + public void setList(RoomList roomList) { + if(this.roomList != null) { + this.roomList.unregisterObserver(observer); + } + this.roomList = roomList; + this.roomList.registerObserver(observer); + reloadFromList(roomList); + } + + public void invalidate() { + rooms = new ArrayList(); + if(roomList != null) { + roomList.unregisterObserver(observer); + } + roomList = null; + notifyDataSetInvalidated(); + } + + private void reloadFromList(RoomList list) { + rooms = new ArrayList(roomList.getMap().values()); + Collections.sort(rooms, Collections.reverseOrder(Room.ID_COMPARATOR)); notifyDataSetChanged(); } @@ -99,17 +128,4 @@ return v; } - - public void itemAdded(Map map, String key, Room value) { - setList(map.values()); - } - - public void itemRemoved(Map map, String key, Room oldValue) { - setList(map.values()); - } - - public void itemReplaced(Map map, String key, Room oldValue, - Room newValue) { - setList(map.values()); - } } \ No newline at end of file