Skip to content

Commit

Permalink
refactor:调整removeView逻辑
Browse files Browse the repository at this point in the history
  • Loading branch information
Petterpx committed Nov 25, 2024
1 parent 8280145 commit 180c74e
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.petterp.floatingx.assist.helper.FxAppHelper
import com.petterp.floatingx.listener.provider.IFxPlatformProvider
import com.petterp.floatingx.util.decorView
import com.petterp.floatingx.util.safeAddView
import com.petterp.floatingx.util.safeRemoveView
import com.petterp.floatingx.util.topActivity
import com.petterp.floatingx.view.FxDefaultContainerView
import java.lang.ref.WeakReference
Expand Down Expand Up @@ -93,7 +94,7 @@ class FxAppPlatformProvider(
val fxView = _internalView ?: return false
val decorView = activity.decorView ?: return false
if (containerGroupView === decorView) return false
if (ViewCompat.isAttachedToWindow(fxView)) containerGroupView?.removeView(fxView)
if (ViewCompat.isAttachedToWindow(fxView)) containerGroupView?.safeRemoveView(fxView)
_containerGroup = WeakReference(decorView)
decorView.safeAddView(fxView)
return true
Expand All @@ -106,7 +107,7 @@ class FxAppPlatformProvider(
return true
} else {
if (nContainer === containerGroupView) return false
containerGroupView?.removeView(_internalView)
containerGroupView?.safeRemoveView(_internalView)
nContainer.safeAddView(_internalView)
_containerGroup = WeakReference(nContainer)
}
Expand All @@ -119,7 +120,7 @@ class FxAppPlatformProvider(
if (!ViewCompat.isAttachedToWindow(fxView)) return false
val nContainer = activity.decorView ?: return false
if (nContainer !== oldContainer) return false
oldContainer.removeView(_internalView)
oldContainer.safeRemoveView(_internalView)
return true
}

Expand All @@ -135,7 +136,7 @@ class FxAppPlatformProvider(

private fun detach() {
_internalView?.visibility = View.GONE
containerGroupView?.removeView(_internalView)
containerGroupView?.safeRemoveView(_internalView)
_containerGroup?.clear()
_containerGroup = null
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.view.View
import android.view.ViewGroup
import com.petterp.floatingx.assist.helper.FxScopeHelper
import com.petterp.floatingx.listener.provider.IFxPlatformProvider
import com.petterp.floatingx.util.safeRemoveView
import com.petterp.floatingx.view.FxDefaultContainerView
import com.petterp.floatingx.view.IFxInternalHelper
import java.lang.ref.WeakReference
Expand Down Expand Up @@ -52,7 +53,7 @@ class FxScopePlatFromProvider(
}

override fun reset() {
containerGroupView?.removeView(_internalView)
containerGroupView?.safeRemoveView(_internalView)
_containerGroup?.clear()
_containerGroup = null
}
Expand Down
11 changes: 10 additions & 1 deletion floatingx/src/main/java/com/petterp/floatingx/util/FxExt.kt
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,23 @@ internal val Activity.contentView: FrameLayout?
internal fun ViewGroup.safeAddView(view: View?, lp: ViewGroup.LayoutParams? = null) {
if (view == null) return
if (view.parent == this) return
(view.parent as? ViewGroup)?.removeView(view)
(view.parent as? ViewGroup)?.safeRemoveView(view)
if (lp == null) {
addView(view)
} else {
addView(view, lp)
}
}


internal fun ViewGroup.safeRemoveView(view: View?) {
if (view == null) return
if (!view.isAttachedToWindow) return
kotlin.runCatching {
removeView(view)
}
}

/**
* 创建一个fx,自行初始化并控制插入位置
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import android.widget.FrameLayout
import com.petterp.floatingx.assist.helper.FxBasisHelper
import com.petterp.floatingx.util.INVALID_LAYOUT_ID
import com.petterp.floatingx.util.safeAddView
import com.petterp.floatingx.util.safeRemoveView
import com.petterp.floatingx.view.helper.FxViewAnimationHelper
import com.petterp.floatingx.view.helper.FxViewLocationHelper
import com.petterp.floatingx.view.helper.FxViewTouchHelper
Expand Down Expand Up @@ -89,14 +90,14 @@ abstract class FxBasicContainerView @JvmOverloads constructor(
override fun updateView(layoutId: Int) {
helper.fxLog.d("fxView -> updateView")
locationHelper.needUpdateLocation()
removeView(_childView)
safeRemoveView(_childView)
installChildView()
}

override fun updateView(layoutView: View) {
helper.fxLog.d("fxView -> updateView")
locationHelper.needUpdateLocation()
removeView(_childView)
safeRemoveView(_childView)
installChildView()
}

Expand Down

0 comments on commit 180c74e

Please sign in to comment.