diff options
| -rw-r--r-- | core/java/android/transition/Scene.java | 17 | ||||
| -rw-r--r-- | core/res/res/values/ids.xml | 1 | ||||
| -rw-r--r-- | core/res/res/values/symbols.xml | 1 |
3 files changed, 11 insertions, 8 deletions
diff --git a/core/java/android/transition/Scene.java b/core/java/android/transition/Scene.java index d798abec5a33..5800bd586bd0 100644 --- a/core/java/android/transition/Scene.java +++ b/core/java/android/transition/Scene.java @@ -36,27 +36,28 @@ public final class Scene { private ViewGroup mSceneRoot; private ViewGroup mLayout; // alternative to layoutId Runnable mEnterAction, mExitAction; - private static ThreadLocal<SparseArray<Scene>> sScenes = new ThreadLocal<SparseArray<Scene>>(); /** * Returns a Scene described by the resource file associated with the given - * <code>layoutId</code> parameter. If such a Scene has already been created, - * that same Scene will be returned. This caching of layoutId-based scenes enables - * sharing of common scenes between those created in code and those referenced - * by {@link TransitionManager} XML resource files. + * <code>layoutId</code> parameter. If such a Scene has already been created for + * the given <code>sceneRoot</code>, that same Scene will be returned. + * This caching of layoutId-based scenes enables sharing of common scenes + * between those created in code and those referenced by {@link TransitionManager} + * XML resource files. * * @param sceneRoot The root of the hierarchy in which scene changes * and transitions will take place. * @param layoutId The id of a standard layout resource file. * @param context The context used in the process of inflating * the layout resource. - * @return + * @return The scene for the given root and layout id */ public static Scene getSceneForLayout(ViewGroup sceneRoot, int layoutId, Context context) { - SparseArray<Scene> scenes = sScenes.get(); + SparseArray<Scene> scenes = (SparseArray<Scene>) sceneRoot.getTag( + com.android.internal.R.id.scene_layoutid_cache); if (scenes == null) { scenes = new SparseArray<Scene>(); - sScenes.set(scenes); + sceneRoot.setTag(com.android.internal.R.id.scene_layoutid_cache, scenes); } Scene scene = scenes.get(layoutId); if (scene != null) { diff --git a/core/res/res/values/ids.xml b/core/res/res/values/ids.xml index 15df295e5784..5c0baaa4998f 100644 --- a/core/res/res/values/ids.xml +++ b/core/res/res/values/ids.xml @@ -81,4 +81,5 @@ <item type="id" name="popup_submenu_presenter" /> <item type="id" name="action_bar_spinner" /> <item type="id" name="current_scene" /> + <item type="id" name="scene_layoutid_cache" /> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index e17b650ff969..dc0841ab1041 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -55,6 +55,7 @@ <java-symbol type="id" name="clearDefaultHint" /> <java-symbol type="id" name="contentPanel" /> <java-symbol type="id" name="current_scene" /> + <java-symbol type="id" name="scene_layoutid_cache" /> <java-symbol type="id" name="customPanel" /> <java-symbol type="id" name="datePicker" /> <java-symbol type="id" name="day" /> |