diff options
Diffstat (limited to 'src/org/madore')
-rw-r--r-- | src/org/madore/android/unicodeMap/UnicodeMapActivity.java | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/org/madore/android/unicodeMap/UnicodeMapActivity.java b/src/org/madore/android/unicodeMap/UnicodeMapActivity.java index 687493e..e633006 100644 --- a/src/org/madore/android/unicodeMap/UnicodeMapActivity.java +++ b/src/org/madore/android/unicodeMap/UnicodeMapActivity.java @@ -1,5 +1,6 @@ package org.madore.android.unicodeMap; +import java.lang.ref.SoftReference; import java.util.Arrays; import java.util.List; import java.util.ArrayList; @@ -30,8 +31,18 @@ public final class UnicodeMapActivity extends ListActivity { protected static abstract class Display { protected String title; + protected SoftReference<List<UnicodeDisplayable>> listCacheRef; public Display(String title) { this.title = title; } public final String getTitle() { return this.title; } + public void setListCache(List<UnicodeDisplayable> list) { + this.listCacheRef = new SoftReference<List<UnicodeDisplayable>>(list); + } + public List<UnicodeDisplayable> getListCache() { + if ( this.listCacheRef != null ) + return this.listCacheRef.get(); + else + return null; + } } protected static class RootDisplay extends Display { public RootDisplay() { super(null); } @@ -138,12 +149,17 @@ public final class UnicodeMapActivity extends ListActivity { protected void doDisplay(Display disp, boolean isNew) { curDisp = disp; - List<UnicodeDisplayable> list; + List<UnicodeDisplayable> list = disp.getListCache(); UnicodeArrayAdapter adapter; - if ( disp instanceof RootDisplay ) { + if ( list != null ) { + android.util.Log.v("UnicodeMapActivity", "list was retrieved from its cache"); + adapter = new UnicodeArrayAdapter(this, list); + setListAdapter(adapter); + } else if ( disp instanceof RootDisplay ) { list = new ArrayList<UnicodeDisplayable>(UnicodeCharacter.Range.values().length); for ( UnicodeCharacter.Range rng : UnicodeCharacter.Range.values() ) list.add(rng); + disp.setListCache(list); adapter = new UnicodeArrayAdapter(this, list); setListAdapter(adapter); } else if ( disp instanceof RangeDisplay ) { @@ -152,6 +168,7 @@ public final class UnicodeMapActivity extends ListActivity { list = new ArrayList<UnicodeDisplayable>(db.countRange(from,to)); for ( UnicodeCharacter ch : db.getRange(from,to) ) list.add(ch); + disp.setListCache(list); adapter = new UnicodeArrayAdapter(this, list); setListAdapter(adapter); } else if ( disp instanceof SearchDisplay ) { @@ -161,6 +178,7 @@ public final class UnicodeMapActivity extends ListActivity { list = new ArrayList<UnicodeDisplayable>(sizeHint); for ( UnicodeCharacter ch : db.searchNames(s,limit+1) ) list.add(ch); + disp.setListCache(list); int size = list.size(); ((SearchDisplay)disp).setSizeHint(size); boolean overflowed = ( size > limit ); |