diff -r 12fdfd2038d4 -r 641f11cdd319 project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/PlayerListAdapter.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/PlayerListAdapter.java Sat Jul 21 14:56:52 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/PlayerListAdapter.java Mon Jul 23 00:17:06 2012 +0200 @@ -1,24 +1,35 @@ 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.PlayerList.Observer; import android.content.Context; +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 PlayerListAdapter extends BaseAdapter implements Observer { +public class PlayerListAdapter extends BaseAdapter { private List players = new ArrayList(); private Context context; + private PlayerList playerList; + + private DataSetObserver observer = new DataSetObserver() { + @Override + public void onChanged() { + reloadFromList(playerList); + } + + @Override + public void onInvalidated() { + invalidate(); + } + }; public PlayerListAdapter(Context context) { this.context = context; @@ -28,7 +39,7 @@ return players.size(); } - public Object getItem(int position) { + public Player getItem(int position) { return players.get(position); } @@ -39,23 +50,28 @@ public boolean hasStableIds() { return true; } - - public void itemAdded(Map map, String key, Player value) { - setPlayerList(map.values()); - } - - public void itemRemoved(Map map, String key, Player oldValue) { - setPlayerList(map.values()); - } - - public void itemReplaced(Map map, String key, - Player oldValue, Player newValue) { - setPlayerList(map.values()); + + public void setList(PlayerList playerList) { + if(this.playerList != null) { + this.playerList.unregisterObserver(observer); + } + this.playerList = playerList; + this.playerList.registerObserver(observer); + reloadFromList(playerList); } - public void setPlayerList(Collection players) { - this.players = new ArrayList(players); - Collections.sort(this.players, Player.nameComparator); + public void invalidate() { + players = new ArrayList(); + if(playerList != null) { + playerList.unregisterObserver(observer); + } + playerList = null; + notifyDataSetInvalidated(); + } + + private void reloadFromList(PlayerList list) { + players = new ArrayList(list.getMap().values()); + Collections.sort(players, Player.NAME_COMPARATOR); notifyDataSetChanged(); }