我试图PopupWindow从 a显示 a Fragment,然后将 a 添加ComposableView到 Popup contentView,但它崩溃了,因为ViewTreeLifecycleOwner找不到PopupDecorView$PopupDecorView。
我尝试过的事情:
PopupWindowCompat显示弹出窗口。Fragment(1.3.4 和 1.4.0-alpha1)的多个库版本。Activity我使用的版本是:1.3.0-alpha08。contentView手动设置和的生命周期所有者ComposeView。来电:
添加:ComposeViewcontentView
contentWindow.contentView.addView(
AdaptiveCardistRender.adaptiveCardistResponseView(
contentWindow.contentView.context,
response
)
)
Run Code Online (Sandbox Code Playgroud)
显示弹出窗口:
PopupWindowCompat.showAsDropDown(
popupWindow,
anchor,
0,
startVerticalOffset,
Gravity.NO_GRAVITY
)
Run Code Online (Sandbox Code Playgroud)
设置生命周期PopupWindow:
class ExtensionsPopupWindow(
val contentView: ScrollView,
width: Int,
height: Int,
lifecycleOwner: LifecycleOwner,
savedStateRegistryOwner: SavedStateRegistryOwner,
) : PopupWindow(contentView, width, height, true) {
init {
ViewTreeLifecycleOwner.set(contentView, lifecycleOwner)
ViewTreeSavedStateRegistryOwner.set(contentView, savedStateRegistryOwner) …Run Code Online (Sandbox Code Playgroud) android popupwindow android-lifecycle android-popupwindow android-jetpack-compose
我正在使用片段转换来为回收器视图中的视图设置动画,使用25.0.1支持lib并且转换工作正常,可以推送并弹出目标片段.
我用来生成事务的代码是:
supportFragmentManager.beginTransaction()
.replaceAddToBackStack(R.id.content, fragment)
.addSharedElement(fragment, commonViews)
.commit()
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试更新到25.1.0版本的支持库,并且pop动画正在崩溃,因为转换没有找到原始视图,并且崩溃了:
E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at android.support.v4.app.FragmentTransitionCompat21.setNameOverridesOptimized(FragmentTransitionCompat21.java:339)
at android.support.v4.app.FragmentTransition.configureTransitionsOptimized(FragmentTransition.java:232)
at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:111)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2143)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2092)
at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:822)
at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:775)
at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:178)
at App.ui.base.BaseActivity.onBackPressed(BaseActivity.kt:23)
...
Run Code Online (Sandbox Code Playgroud)
但是,如果我禁用"优化",它可以正常工作.
supportFragmentManager.beginTransaction()
.replaceAddToBackStack(R.id.content, fragment)
.addSharedElement(fragment, commonViews)
.setAllowOptimization(false)
.commit()
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
编辑:我用来包装共享元素的扩展:
.replaceAddToBackStack
fun<T : Fragment> FragmentTransaction.replaceAddToBackStack(containerView: Int, fragment: T, tag: String? = null) : FragmentTransaction {
return replace(containerView, fragment, tag).addToBackStack(fragment.toString())
}
Run Code Online (Sandbox Code Playgroud)
.addSharedElement
fun<T: Fragment, V: View> FragmentTransaction
.addSharedElement(destination: T?, …Run Code Online (Sandbox Code Playgroud)