am 224d2225
: am 29cfce7a
: Merge "Making sure to clear state related to views that are being recycled (issue 7650538)" into jb-mr1.1-dev
* commit '224d22250862d44cca08498630fcb0e7da68912b': Making sure to clear state related to views that are being recycled (issue 7650538)
This commit is contained in:
@ -318,9 +318,13 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
|
||||
*/
|
||||
private class RemoteViewsFrameLayoutRefSet {
|
||||
private HashMap<Integer, LinkedList<RemoteViewsFrameLayout>> mReferences;
|
||||
private HashMap<RemoteViewsFrameLayout, LinkedList<RemoteViewsFrameLayout>>
|
||||
mViewToLinkedList;
|
||||
|
||||
public RemoteViewsFrameLayoutRefSet() {
|
||||
mReferences = new HashMap<Integer, LinkedList<RemoteViewsFrameLayout>>();
|
||||
mViewToLinkedList =
|
||||
new HashMap<RemoteViewsFrameLayout, LinkedList<RemoteViewsFrameLayout>>();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -337,6 +341,7 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
|
||||
refs = new LinkedList<RemoteViewsFrameLayout>();
|
||||
mReferences.put(pos, refs);
|
||||
}
|
||||
mViewToLinkedList.put(layout, refs);
|
||||
|
||||
// Add the references to the list
|
||||
refs.add(layout);
|
||||
@ -355,14 +360,26 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
|
||||
final LinkedList<RemoteViewsFrameLayout> refs = mReferences.get(pos);
|
||||
for (final RemoteViewsFrameLayout ref : refs) {
|
||||
ref.onRemoteViewsLoaded(view, mRemoteViewsOnClickHandler);
|
||||
if (mViewToLinkedList.containsKey(ref)) {
|
||||
mViewToLinkedList.remove(ref);
|
||||
}
|
||||
}
|
||||
refs.clear();
|
||||
|
||||
// Remove this set from the original mapping
|
||||
mReferences.remove(pos);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* We need to remove views from this set if they have been recycled by the AdapterView.
|
||||
*/
|
||||
public void removeView(RemoteViewsFrameLayout rvfl) {
|
||||
if (mViewToLinkedList.containsKey(rvfl)) {
|
||||
mViewToLinkedList.get(rvfl).remove(rvfl);
|
||||
mViewToLinkedList.remove(rvfl);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all references to all RemoteViewsFrameLayouts returned by the adapter.
|
||||
*/
|
||||
@ -370,6 +387,7 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
|
||||
// We currently just clear the references, and leave all the previous layouts returned
|
||||
// in their default state of the loading view.
|
||||
mReferences.clear();
|
||||
mViewToLinkedList.clear();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1134,6 +1152,10 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
|
||||
boolean isConnected = mServiceConnection.isConnected();
|
||||
boolean hasNewItems = false;
|
||||
|
||||
if (convertView != null && convertView instanceof RemoteViewsFrameLayout) {
|
||||
mRequestedViews.removeView((RemoteViewsFrameLayout) convertView);
|
||||
}
|
||||
|
||||
if (!isInCache && !isConnected) {
|
||||
// Requesting bind service will trigger a super.notifyDataSetChanged(), which will
|
||||
// in turn trigger another request to getView()
|
||||
|
Reference in New Issue
Block a user