Merge "Fix a bug with bad view reuse."

main
Jean Chalard 2013-07-16 05:43:15 +00:00 committed by Android (Google) Code Review
commit 988a1f3132
3 changed files with 9 additions and 2 deletions

View File

@ -47,6 +47,7 @@ public class ButtonSwitcher extends FrameLayout {
private Button mInstallButton;
private Button mCancelButton;
private Button mDeleteButton;
private DictionaryListInterfaceState mInterfaceState;
private OnClickListener mOnClickListener;
public ButtonSwitcher(Context context, AttributeSet attrs) {
@ -57,9 +58,10 @@ public class ButtonSwitcher extends FrameLayout {
super(context, attrs, defStyle);
}
public void reset() {
public void reset(final DictionaryListInterfaceState interfaceState) {
mStatus = NOT_INITIALIZED;
mAnimateToStatus = NOT_INITIALIZED;
mInterfaceState = interfaceState;
}
@Override
@ -153,6 +155,7 @@ public class ButtonSwitcher extends FrameLayout {
private ViewPropertyAnimator animateButton(final View button, final int direction) {
final float outerX = getWidth();
final float innerX = button.getX() - button.getTranslationX();
mInterfaceState.removeFromCache((View)getParent());
if (ANIMATION_IN == direction) {
button.setClickable(true);
return button.animate().translationX(0);

View File

@ -80,4 +80,8 @@ public class DictionaryListInterfaceState {
mViewCache.add(view);
return view;
}
public void removeFromCache(final View view) {
mViewCache.remove(view);
}
}

View File

@ -224,7 +224,7 @@ public final class WordListPreference extends Preference {
(ButtonSwitcher)view.findViewById(R.id.wordlist_button_switcher);
// We need to clear the state of the button switcher, because we reuse views; if we didn't
// reset it would animate from whatever its old state was.
buttonSwitcher.reset();
buttonSwitcher.reset(mInterfaceState);
if (mInterfaceState.isOpen(mWordlistId)) {
// The button is open.
final int previousStatus = mInterfaceState.getStatus(mWordlistId);