Android 如何使用编写内部片段?

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

该文档描述了如何在活动中创建UI(Jetpack Compose)

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上测试),虽然这是真的,但它不会使使用片段作为主干的用例无效,这可能是迁移代码库的常见场景。所以这并不能回答问题。