简体   繁体   English

在 Jetpack Compose 上按下按钮时如何弹出堆栈

[英]How to pop back stack when button is pressed on Jetpack Compose

I have a compose screen in a fragment, and in that screen there is a button.我在片段中有一个撰写屏幕,在该屏幕中有一个按钮。

I want to dismiss the fragment/go back to previous screen when this button is pressed.我想在按下此按钮时关闭片段/返回上一屏幕。

But I can't access any activity/fragment methods inside onClick.但我无法访问 onClick 内的任何活动/片段方法。

How can I do that?我怎样才能做到这一点?

@AndroidEntryPoint
class MyFragment @Inject constructor() : Fragment(){

    @ExperimentalComposeUiApi
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        return ComposeView(requireContext()).apply {
            this.setContent {
                Button(
                    onClick = {
                        //Dismiss fragment.
                    },
                ) {
                    Text(
                        "Click me"
                    )
                }
            }
        }
    }
}

You can get the LocalOnBackPressedDispatcherOwner inside any composable, and use onBackPressed() or navigate in an other way:您可以在任何可组合项中获取LocalOnBackPressedDispatcherOwner ,并使用onBackPressed()或以其他方式导航:

val onBackPressedDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher
Button(
    onClick = {
        onBackPressedDispatcher?.onBackPressed()
    },
) {
    Text(
        "Click me"
    )
}

Solved like this:像这样解决:

@AndroidEntryPoint
class MyFragment @Inject constructor(

) : Fragment(){

    @ExperimentalComposeUiApi
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        return ComposeView(requireContext()).apply {
            this.setContent {

                val shouldDismiss = remember { mutableStateOf(false) }

                if (shouldDismiss) {
                    dismissFragment()
                }else{
                    Button(
                        onClick = {
                            shouldDismiss.value = true
                        },
                    ) {
                        Text(
                            "Click me"
                        )
                    }
                }
            }
        }
    }

    private fun dismissFragment(){
        activity?.onBackPressed()
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM