Android 如何使用编写内部片段?
该文档描述了如何在活动中创建UI(Jetpack Compose)Android 如何使用编写内部片段?,android,android-jetpack-compose,Android,Android Jetpack Compose,该文档描述了如何在活动中创建UI(Jetpack Compose) class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { Text("Hello world!") } } } 但我如何在片段中使用它呢 找到了它: class
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Text("Hello world!")
}
}
}
但我如何在片段中使用它呢 找到了它:
class LoginFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val fragmentView = inflater.inflate(R.layout.fragment_login, container, false)
(fragmentView as ViewGroup).setContent {
Hello("Jetpack Compose")
}
return fragmentView
}
@Composable
fun Hello(name: String) = MaterialTheme {
FlexColumn {
inflexible {
// Item height will be equal content height
TopAppBar( // App Bar with title
title = { Text("Jetpack Compose Sample") }
)
}
expanded(1F) {
// occupy whole empty space in the Column
Center {
// Center content
Text("Hello $name!") // Text label
}
}
}
}
}
ViewGroup
上的setContent
现在已不推荐使用
以下是截至Composev1.0.0-alpha01的准确信息
对于纯合成UI片段
:
class ComposeUIFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return ComposeView(requireContext()).apply {
setContent {
Text(text = "Hello world.")
}
}
}
}
对于混合编写UI片段
-将ComposeView
添加到xml布局,然后:
class ComposeUIFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_compose_ui, container, false).apply {
findViewById<ComposeView>(R.id.composeView).setContent {
Text(text = "Hello world.")
}
}
}
}
class ComposeUIFragment:Fragment(){
覆盖创建视图(
充气器:布局充气器,容器:视图组?,
savedInstanceState:捆绑?
):查看{
返回充气器。充气(R.layout.fragment\u compose\u ui,容器,false)。应用{
findViewById(R.id.composeView).setContent{
Text(Text=“你好,世界。”)
}
}
}
}
您不需要编写片段。您可以导航到另一个屏幕,而无需片段或活动:
class MainActivity:AppCompatActivity(){
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
设置内容{
val navController=MembernavController()
导航主机(导航控制器,startDestination=“欢迎”){
可组合(“欢迎”){WelcomeScreen(导航控制器)}
可组合(“secondScreen”){secondScreen()}
}
}
}
}
@组合的
趣味WelcomeScreen(导航控制器:导航控制器){
纵队{
Text(Text=“欢迎!”)
按钮(onClick={navController.navigate(“secondScreen”)}){
Text(Text=“继续”)
}
}
}
@组合的
趣味第二屏(){
Text(Text=“第二屏!”)
}
请编辑您的问题,提供一个最小的可重复示例。到目前为止,你的问题有点模糊,很难看出你在做什么以及问题在哪里。如果我不确定是否找到你,请在你的活动中使用framelayout片段有自己的生命周期和xml文件,你可以使用,这里是官方文档链接好的,我给你一个投票现在享受代码。。我已经发布了代码..你能分享fragment_login.xml的内容吗?它已被弃用(在alpha12上测试),虽然这是真的,但它不会使使用片段作为主干的用例无效,这可能是迁移代码库的常见场景。所以这并不能回答问题。