Skip to content

Commit 3353579

Browse files
Chang Huafacebook-github-bot
authored andcommitted
fix ReactScrollViewHelper.kt remove listeners logic (#51718)
Summary: Pull Request resolved: #51718 ## what the current removing listeners code is not working. in prod, when removeScrollListener is called, it creates a new weakReference of the scroll listener and it would never match any existing weakreference listeners in the list. The remove action would end up removing nothing from the list. This diff fixes the issue by iterating through the list and compare the obj reference: https://stackoverflow.com/questions/6296051/how-to-remove-a-weakreference-from-a-list Changelog: [Internal] Reviewed By: Abbondanzo Differential Revision: D75716993 fbshipit-source-id: af9eed218deb44e87317c19ffca7d227b96de8e2
1 parent ab9ff88 commit 3353579

1 file changed

Lines changed: 6 additions & 2 deletions

File tree

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ import android.animation.Animator
1111
import android.animation.ValueAnimator
1212
import android.content.Context
1313
import android.graphics.Point
14+
import android.os.Build
1415
import android.view.View
1516
import android.view.ViewGroup
1617
import android.widget.OverScroller
18+
import androidx.annotation.RequiresApi
1719
import androidx.core.view.ViewCompat.FocusDirection
1820
import androidx.core.view.ViewCompat.FocusRealDirection
1921
import com.facebook.common.logging.FLog
@@ -222,19 +224,21 @@ public object ReactScrollViewHelper {
222224
scrollListeners.add(WeakReference(listener))
223225
}
224226

227+
@RequiresApi(Build.VERSION_CODES.N)
225228
@JvmStatic
226229
public fun removeScrollListener(listener: ScrollListener) {
227-
scrollListeners.remove(WeakReference(listener))
230+
scrollListeners.removeIf { it.get() == null || it.get() == listener }
228231
}
229232

230233
@JvmStatic
231234
public fun addLayoutChangeListener(listener: LayoutChangeListener) {
232235
layoutChangeListeners.add(WeakReference(listener))
233236
}
234237

238+
@RequiresApi(Build.VERSION_CODES.N)
235239
@JvmStatic
236240
public fun removeLayoutChangeListener(listener: LayoutChangeListener) {
237-
layoutChangeListeners.remove(WeakReference(listener))
241+
layoutChangeListeners.removeIf { it.get() == null || it.get() == listener }
238242
}
239243

240244
/**

0 commit comments

Comments
 (0)