From 022153fec1af965bee72b40946226ecfe340ec5d Mon Sep 17 00:00:00 2001 From: Phillip Hsu Date: Wed, 7 Sep 2016 16:54:41 -0700 Subject: [PATCH] Reconsider ViewHolder item ID for tag making --- .../clock2/alarms/BaseAlarmViewHolder.java | 13 ++++++------- .../philliphsu/clock2/timers/TimerViewHolder.java | 7 +++++-- .../philliphsu/clock2/util/FragmentTagUtils.java | 7 +++++++ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/philliphsu/clock2/alarms/BaseAlarmViewHolder.java b/app/src/main/java/com/philliphsu/clock2/alarms/BaseAlarmViewHolder.java index 6f8ff8c..40373e7 100644 --- a/app/src/main/java/com/philliphsu/clock2/alarms/BaseAlarmViewHolder.java +++ b/app/src/main/java/com/philliphsu/clock2/alarms/BaseAlarmViewHolder.java @@ -114,17 +114,16 @@ public abstract class BaseAlarmViewHolder extends BaseViewHolder { } } ); - - // Are we recreating this because of a rotation? - // If so, try finding any dialog that was last shown in our backstack, - // and restore the callback. - mAddLabelDialogController.tryRestoreCallback(makeTag(R.id.label)); - mTimePickerDialogController.tryRestoreCallback(makeTag(R.id.time)); } @Override public void onBind(Alarm alarm) { super.onBind(alarm); + // Items that are not in view will not be bound. If in one orientation the item was in view + // and in another it is out of view, then the callback for that item will not be restored + // for the new orientation. + mAddLabelDialogController.tryRestoreCallback(makeTag(R.id.label)); + mTimePickerDialogController.tryRestoreCallback(makeTag(R.id.time)); bindTime(alarm); bindSwitch(alarm.isEnabled()); bindDismissButton(alarm); @@ -301,6 +300,6 @@ public abstract class BaseAlarmViewHolder extends BaseViewHolder { } private String makeTag(@IdRes int viewId) { - return FragmentTagUtils.makeTag(BaseAlarmViewHolder.class, viewId); + return FragmentTagUtils.makeTag(BaseAlarmViewHolder.class, viewId, getItemId()); } } diff --git a/app/src/main/java/com/philliphsu/clock2/timers/TimerViewHolder.java b/app/src/main/java/com/philliphsu/clock2/timers/TimerViewHolder.java index ffb161c..7795fcf 100644 --- a/app/src/main/java/com/philliphsu/clock2/timers/TimerViewHolder.java +++ b/app/src/main/java/com/philliphsu/clock2/timers/TimerViewHolder.java @@ -68,7 +68,6 @@ public class TimerViewHolder extends BaseViewHolder { mController.updateLabel(label); } }); - mAddLabelDialogController.tryRestoreCallback(makeTag(R.id.label)); // The item layout is inflated in the super ctor, so we can safely reference our views. mPopupMenu = new PopupMenu(getContext(), mMenuButton); @@ -92,6 +91,10 @@ public class TimerViewHolder extends BaseViewHolder { Log.d(TAG, "Binding TimerViewHolder"); // TOneverDO: create before super mController = new TimerController(timer, mAsyncTimersTableUpdateHandler); + // Items that are not in view will not be bound. If in one orientation the item was in view + // and in another it is out of view, then the callback for that item will not be restored + // for the new orientation. + mAddLabelDialogController.tryRestoreCallback(makeTag(R.id.label)); Log.d(TAG, "timer.label() = " + timer.label()); bindLabel(timer.label()); bindChronometer(timer); @@ -198,6 +201,6 @@ public class TimerViewHolder extends BaseViewHolder { } private String makeTag(@IdRes int viewId) { - return FragmentTagUtils.makeTag(TimerViewHolder.class, viewId); + return FragmentTagUtils.makeTag(TimerViewHolder.class, viewId, getItemId()); } } diff --git a/app/src/main/java/com/philliphsu/clock2/util/FragmentTagUtils.java b/app/src/main/java/com/philliphsu/clock2/util/FragmentTagUtils.java index fac9507..75cb8f8 100644 --- a/app/src/main/java/com/philliphsu/clock2/util/FragmentTagUtils.java +++ b/app/src/main/java/com/philliphsu/clock2/util/FragmentTagUtils.java @@ -14,5 +14,12 @@ public final class FragmentTagUtils { return cls.getName() + ":" + viewId; } + /** + * A version suitable for our ViewHolders. + */ + public static String makeTag(Class cls, @IdRes int viewId, long itemId) { + return makeTag(cls, viewId) + ":" + itemId; + } + private FragmentTagUtils() {} }