首页 > 解决方案 > Jetpack compose 中的 AppCompatActivity 而不是 ComponentActivity

问题描述

我想datePicker在 Jetpack compose 中单击按钮打开对话框。
为此,我在按钮的onClick操作中使用以下代码。

val context = LocalContext.current
Button(onClick = {
    (context as AppCompatActivity).let {
        val picker = MaterialDatePicker.Builder.datePicker().build()
        picker.show(it.supportFragmentManager, picker.toString())
        picker.addOnPositiveButtonClickListener {
            // some code
        }
    }
})

如果我使用的是ComponentActivitysupportFragmentManager不支持。
从 扩展活动是否可以AppCompatActivity
或者有没有其他方法,如果上述解决方案不正确,我可以得到解决方案吗?

标签: androidandroid-jetpack-composeappcompatactivity

解决方案


您可以使用,AppCompatActivity因为它 extends FragmentActivitywhich extends ComponentActivity

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
           val activity = LocalContext.current as AppCompatActivity
                Button(onClick={ showDatePicker(activity)}){
                Text("Picker")
           }
        }
    }
}

fun showDatePicker(activity: AppCompatActivity){
    val picker = MaterialDatePicker.Builder.datePicker().build()
    activity?.let {
        picker.show(it.supportFragmentManager, picker.toString())
        picker.addOnPositiveButtonClickListener {
        }
    }
}

注意:它至少需要AppCompat 1.3.0版本。


推荐阅读