diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2014-01-15 07:56:37 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2014-01-15 07:56:37 +0100 |
| commit | e83842077c5f5e3eb7005f1e9792f8b31ff63d94 (patch) | |
| tree | cc69cf8a51d18515931ef27fce6eb8f254af04b5 /main | |
| parent | 9315e8fa15fba2b4ad640544aeb88fb32666db9d (diff) | |
| download | cgeo-e83842077c5f5e3eb7005f1e9792f8b31ff63d94.zip cgeo-e83842077c5f5e3eb7005f1e9792f8b31ff63d94.tar.gz cgeo-e83842077c5f5e3eb7005f1e9792f8b31ff63d94.tar.bz2 | |
IllegalStateException in search suggestions
IllegalStateException: The content of the adapter has changed but
ListView did not receive a notification.
Occurred only seldom. The filter already switches between background and
UI thread, but the pointer to the result list was previously already
updated in the background thread.
Diffstat (limited to 'main')
| -rw-r--r-- | main/src/cgeo/geocaching/search/AutoCompleteAdapter.java | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/main/src/cgeo/geocaching/search/AutoCompleteAdapter.java b/main/src/cgeo/geocaching/search/AutoCompleteAdapter.java index c314bbe..123469c 100644 --- a/main/src/cgeo/geocaching/search/AutoCompleteAdapter.java +++ b/main/src/cgeo/geocaching/search/AutoCompleteAdapter.java @@ -15,7 +15,7 @@ import android.widget.Filter; */ public class AutoCompleteAdapter extends ArrayAdapter<String> { - private String[] results; + private String[] suggestions; private final Func1<String, String[]> suggestionFunction; public AutoCompleteAdapter(Context context, int textViewResourceId, final Func1<String, String[]> suggestionFunction) { @@ -25,12 +25,12 @@ public class AutoCompleteAdapter extends ArrayAdapter<String> { @Override public int getCount() { - return results.length; + return suggestions.length; } @Override public String getItem(int index) { - return results[index]; + return suggestions[index]; } @Override @@ -45,18 +45,20 @@ public class AutoCompleteAdapter extends ArrayAdapter<String> { } String trimmed = StringUtils.trim(constraint.toString()); if (StringUtils.length(trimmed) >= 2) { - results = suggestionFunction.call(trimmed); + String[] newResults = suggestionFunction.call(trimmed); - // Assign the data to the FilterResults - filterResults.values = results; - filterResults.count = results.length; + // Assign the data to the FilterResults, but do not yet store in the global member. + // Otherwise we might invalidate the adapter and cause an IllegalStateException. + filterResults.values = newResults; + filterResults.count = newResults.length; } return filterResults; } @Override - protected void publishResults(CharSequence constraint, FilterResults results) { - if (results != null && results.count > 0) { + protected void publishResults(CharSequence constraint, FilterResults filterResults) { + if (filterResults != null && filterResults.count > 0) { + suggestions = (String[]) filterResults.values; notifyDataSetChanged(); } else { |
