mirror of
https://github.com/material-components/material-components-android.git
synced 2026-02-20 08:39:55 +08:00
am 0302bd7d: am ca28889b: am 653c415b: am 5605e4ab: Merge "Store OnOffsetChangeListener with hard refs" into lmp-mr1-ub-dev
* commit '0302bd7dee09712fe82e36c62ceb51a2ed891642': Store OnOffsetChangeListener with hard refs GitOrigin-RevId=0f83674ac0c3e0e1900b507b94369a44e91bddab PiperOrigin-RevId: 140549172
This commit is contained in:
parent
c910fea1eb
commit
efcce36780
@ -33,9 +33,7 @@ import android.widget.LinearLayout;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -130,7 +128,7 @@ public class AppBarLayout extends LinearLayout {
|
||||
|
||||
private WindowInsetsCompat mLastInsets;
|
||||
|
||||
private final List<WeakReference<OnOffsetChangedListener>> mListeners;
|
||||
private final List<OnOffsetChangedListener> mListeners;
|
||||
|
||||
public AppBarLayout(Context context) {
|
||||
this(context, null);
|
||||
@ -175,14 +173,9 @@ public class AppBarLayout extends LinearLayout {
|
||||
* @see #removeOnOffsetChangedListener(OnOffsetChangedListener)
|
||||
*/
|
||||
public void addOnOffsetChangedListener(OnOffsetChangedListener listener) {
|
||||
for (int i = 0, z = mListeners.size(); i < z; i++) {
|
||||
final WeakReference<OnOffsetChangedListener> ref = mListeners.get(i);
|
||||
if (ref != null && ref.get() == listener) {
|
||||
// Listener already added
|
||||
return;
|
||||
}
|
||||
if (listener != null && !mListeners.contains(listener)) {
|
||||
mListeners.add(listener);
|
||||
}
|
||||
mListeners.add(new WeakReference<>(listener));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -191,14 +184,8 @@ public class AppBarLayout extends LinearLayout {
|
||||
* @param listener the listener to remove.
|
||||
*/
|
||||
public void removeOnOffsetChangedListener(OnOffsetChangedListener listener) {
|
||||
final Iterator<WeakReference<OnOffsetChangedListener>> i = mListeners.iterator();
|
||||
while (i.hasNext()) {
|
||||
final WeakReference<OnOffsetChangedListener> ref = i.next();
|
||||
final OnOffsetChangedListener item = ref.get();
|
||||
if (item == listener || item == null) {
|
||||
// If the item is null, or is our given listener, remove
|
||||
i.remove();
|
||||
}
|
||||
if (listener != null) {
|
||||
mListeners.remove(listener);
|
||||
}
|
||||
}
|
||||
|
||||
@ -915,14 +902,12 @@ public class AppBarLayout extends LinearLayout {
|
||||
}
|
||||
|
||||
private void dispatchOffsetUpdates(AppBarLayout layout) {
|
||||
final List<WeakReference<OnOffsetChangedListener>> listeners = layout.mListeners;
|
||||
final List<OnOffsetChangedListener> listeners = layout.mListeners;
|
||||
|
||||
// Iterate backwards through the list so that most recently added listeners
|
||||
// get the first chance to decide
|
||||
for (int i = 0, z = listeners.size(); i < z; i++) {
|
||||
final WeakReference<OnOffsetChangedListener> ref = listeners.get(i);
|
||||
final OnOffsetChangedListener listener = ref != null ? ref.get() : null;
|
||||
|
||||
final OnOffsetChangedListener listener = listeners.get(i);
|
||||
if (listener != null) {
|
||||
listener.onOffsetChanged(layout, getTopAndBottomOffset());
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user