Use id directly when extensions change fragments

This avoids a crash if the fragment hasn't been created yet.

Test: manual
Change-Id: I0799c50a3482c3c60fd0e27d486db5214e92f183
Fixes: 37855553
This commit is contained in:
Jason Monk
2017-06-22 10:09:29 -04:00
parent ca35ed5cb9
commit 153acbcf2d
2 changed files with 5 additions and 5 deletions

View File

@@ -34,12 +34,14 @@ public class ExtensionFragmentListener<T extends FragmentBase> implements Consum
private final FragmentHostManager mFragmentHostManager;
private final String mTag;
private final Extension<T> mExtension;
private final int mId;
private String mOldClass;
private ExtensionFragmentListener(View view, String tag, int id, Extension<T> extension) {
mTag = tag;
mFragmentHostManager = FragmentHostManager.get(view);
mExtension = extension;
mId = id;
mFragmentHostManager.getFragmentManager().beginTransaction()
.replace(id, (Fragment) mExtension.get(), mTag)
.commit();
@@ -49,7 +51,7 @@ public class ExtensionFragmentListener<T extends FragmentBase> implements Consum
public void accept(T extension) {
try {
Fragment.class.cast(extension);
mFragmentHostManager.getExtensionManager().setCurrentExtension(mTag,
mFragmentHostManager.getExtensionManager().setCurrentExtension(mId, mTag,
mOldClass, extension.getClass().getName(), mExtension.getContext());
mOldClass = extension.getClass().getName();
} catch (ClassCastException e) {

View File

@@ -266,16 +266,14 @@ public class FragmentHostManager {
class ExtensionFragmentManager {
private final ArrayMap<String, Context> mExtensionLookup = new ArrayMap<>();
public void setCurrentExtension(@NonNull String tag, @Nullable String oldClass,
public void setCurrentExtension(int id, @NonNull String tag, @Nullable String oldClass,
@NonNull String currentClass, @Nullable Context context) {
Fragment fragment = getFragmentManager().findFragmentByTag(tag);
if (oldClass != null) {
mExtensionLookup.remove(oldClass);
}
mExtensionLookup.put(currentClass, context);
getFragmentManager().beginTransaction()
.replace(((View) fragment.getView().getParent()).getId(),
instantiate(context, currentClass, null), tag)
.replace(id, instantiate(context, currentClass, null), tag)
.commit();
reloadFragments();
}