Sha*_*ian 5 android android-fragments android-jetpack-compose
问题是如何获取正确的活动上下文来启动以获得片段管理器?从可组合项和片段之间的互操作性角度来看,这可能吗?
@Keep
class Card @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null
) : FrameLayout( // or any other View you want
// don't forget to use context wrapper and to apply your own theme
ContextThemeWrapper(
context,
context.resources.newTheme().apply { applyStyle(R.style.FantasyTheme, true) }
),
attrs
), GamingHubView {
override fun initialize(data: Map<String, Any>?) {
// inflate a view or render views dynamically
// inflate(context, R.layout.view_card, this)
val transaction: FragmentTransaction =
(this.context as AppCompatActivity).supportFragmentManager.beginTransaction()
transaction.replace(
this.id,
BlankFragment.newInstance("", ""),
BlankFragment::class.simpleName
)
transaction.addToBackStack(null)
transaction.commit()
}
}
/**
* Get activity instance from desired context.
*/
fun getActivity(context: Context?): AppCompatActivity? {
if (context == null) return null
if (context is AppCompatActivity) return context
return if (context is ContextWrapper) getActivity(context.baseContext) else null
}
Run Code Online (Sandbox Code Playgroud)
小智 0
我到处都在搜索这个问题,但找不到具体的答案。我猜你想做的是将组合和片段结合起来。在我的例子中,我所做的是创建一个带有撰写视图的 MyActivity,该视图填充整个屏幕,如下所示
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyActivity">
<androidx.compose.ui.platform.ComposeView
android:id="@+id/compose_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
然后在 MyActivity onCreate 方法中,像这样实例化您的撰写视图
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_capture)
findViewById<ComposeView>(R.id.compose_view).setContent {
**YourTheme** {
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在您的活动中的任何位置,您都可以访问supportFragmentManager可用于执行片段事务的权限。所有撰写功能都将在composeView.setContent { }
| 归档时间: |
|
| 查看次数: |
8608 次 |
| 最近记录: |