aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/app/src/main/java/com/wireguard/android/ObservableArrayMapAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--app/src/main/java/com/wireguard/android/ObservableArrayMapAdapter.java30
1 files changed, 19 insertions, 11 deletions
diff --git a/app/src/main/java/com/wireguard/android/ObservableArrayMapAdapter.java b/app/src/main/java/com/wireguard/android/ObservableArrayMapAdapter.java
index d2a5a4cc..dd3a380f 100644
--- a/app/src/main/java/com/wireguard/android/ObservableArrayMapAdapter.java
+++ b/app/src/main/java/com/wireguard/android/ObservableArrayMapAdapter.java
@@ -14,7 +14,7 @@ import android.widget.ListAdapter;
import java.lang.ref.WeakReference;
/**
- * A generic ListAdapter backed by an ObservableMap.
+ * A generic ListAdapter backed by an ObservableArrayMap.
*/
class ObservableArrayMapAdapter<K, V> extends BaseAdapter implements ListAdapter {
@@ -23,8 +23,10 @@ class ObservableArrayMapAdapter<K, V> extends BaseAdapter implements ListAdapter
private ObservableArrayMap<K, V> map;
private final OnMapChangedCallback<K, V> callback = new OnMapChangedCallback<>(this);
- ObservableArrayMapAdapter(Context context, int layoutId, ObservableArrayMap<K, V> map) {
- this.layoutInflater = LayoutInflater.from(context);
+ ObservableArrayMapAdapter(final Context context, final int layoutId,
+ final ObservableArrayMap<K, V> map) {
+ super();
+ layoutInflater = LayoutInflater.from(context);
this.layoutId = layoutId;
setMap(map);
}
@@ -35,17 +37,17 @@ class ObservableArrayMapAdapter<K, V> extends BaseAdapter implements ListAdapter
}
@Override
- public V getItem(int position) {
- return map != null ? map.get(map.keyAt(position)) : null;
+ public V getItem(final int position) {
+ return map != null ? map.valueAt(position) : null;
}
@Override
- public long getItemId(int position) {
- return position;
+ public long getItemId(final int position) {
+ return getItem(position) != null ? getItem(position).hashCode() : -1;
}
@Override
- public View getView(int position, View convertView, ViewGroup parent) {
+ public View getView(final int position, final View convertView, final ViewGroup parent) {
ViewDataBinding binding = DataBindingUtil.getBinding(convertView);
if (binding == null)
binding = DataBindingUtil.inflate(layoutInflater, layoutId, parent, false);
@@ -54,7 +56,12 @@ class ObservableArrayMapAdapter<K, V> extends BaseAdapter implements ListAdapter
return binding.getRoot();
}
- public void setMap(ObservableArrayMap<K, V> newMap) {
+ @Override
+ public boolean hasStableIds() {
+ return true;
+ }
+
+ public void setMap(final ObservableArrayMap<K, V> newMap) {
if (map != null)
map.removeOnMapChangedCallback(callback);
map = newMap;
@@ -68,12 +75,13 @@ class ObservableArrayMapAdapter<K, V> extends BaseAdapter implements ListAdapter
private final WeakReference<ObservableArrayMapAdapter<K, V>> weakAdapter;
- private OnMapChangedCallback(ObservableArrayMapAdapter<K, V> adapter) {
+ private OnMapChangedCallback(final ObservableArrayMapAdapter<K, V> adapter) {
+ super();
weakAdapter = new WeakReference<>(adapter);
}
@Override
- public void onMapChanged(ObservableMap<K, V> sender, K key) {
+ public void onMapChanged(final ObservableMap<K, V> sender, final K key) {
final ObservableArrayMapAdapter<K, V> adapter = weakAdapter.get();
if (adapter != null)
adapter.notifyDataSetChanged();