From 33a95f86828bbffcbdb609a26507f9a51c0cf7c1 Mon Sep 17 00:00:00 2001 From: Thorben Primke Date: Sat, 16 Jan 2016 11:02:56 -0800 Subject: [PATCH] Adds Close Method Adds close method to ensure that realmResults are reset and that the change listener is removed. Verified that doing the right thing and cleaning things up, fixed the fatal exception on item deletion because the 'old' change listener is no longer called. Resolves #13 --- .../realm/RealmBasedRecyclerViewAdapter.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/library/src/main/java/io/realm/RealmBasedRecyclerViewAdapter.java b/library/src/main/java/io/realm/RealmBasedRecyclerViewAdapter.java index 09d51fc..6774a11 100644 --- a/library/src/main/java/io/realm/RealmBasedRecyclerViewAdapter.java +++ b/library/src/main/java/io/realm/RealmBasedRecyclerViewAdapter.java @@ -305,6 +305,14 @@ public int getItemRealmViewType(int position) { return super.getItemViewType(position); } + /** + * Ensure {@link #close()} is called whenever {@link Realm#close()} is called to ensure that the + * {@link #realmResults} are invalidated and the change listener removed. + */ + public void close() { + updateRealmResults(null); + } + /** * Update the RealmResults associated with the Adapter. Useful when the query has been changed. * If the query does not change you might consider using the automaticUpdate feature. @@ -313,15 +321,15 @@ public int getItemRealmViewType(int position) { */ public void updateRealmResults(RealmResults queryResults) { if (listener != null) { - if (this.realmResults != null) { - this.realmResults.realm.removeChangeListener(listener); - } - if (queryResults != null) { - queryResults.realm.addChangeListener(listener); + if (realmResults != null) { + realmResults.realm.removeChangeListener(listener); } } - this.realmResults = queryResults; + realmResults = queryResults; + if (realmResults != null) { + realmResults.realm.addChangeListener(listener); + } updateRowWrappers(); ids = getIdsOfRealmResults(); @@ -338,7 +346,7 @@ public String createHeaderFromColumnValue(String columnValue) { } private List getIdsOfRealmResults() { - if (!animateResults || realmResults.size() == 0) { + if (!animateResults || realmResults == null || realmResults.size() == 0) { return EMPTY_LIST; } @@ -390,6 +398,9 @@ private Object getRealmRowId(int realmIndex) { } private void updateRowWrappers() { + if (realmResults == null) { + return; + } if (addSectionHeaders) { String lastHeader = ""; int headerCount = 0;