如何从片段更改操作栏导航 onClick 侦听器

乔治圣经

我有一个带有片段容器的活动工具栏

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/tlUsersActivity"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/white"
        />

我运行这些行来控制按下的按钮

    setSupportActionBar(binding?.tlUsersActivity)
    if (supportActionBar != null) {
        when (intent.getStringExtra(MainActivityAdmin.FRAGMENT_TYPE)) {
            "View Users" -> {
                supportActionBar?.title = viewUsersText
}

    "Edit Users" -> {
        supportActionBar?.title = editUsersText
    }
}
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        binding?.tlUsersActivity?.setNavigationOnClickListener { onBackPressed() }

我想从片段内部改变这个动作,我想用一个替换片段的函数来替换它。我试过这个,但它没有用

    val actionBar = view?.findViewById<Toolbar>(R.id.tlUsersActivity)
    actionBar?.setNavigationOnClickListener {
        replaceFragment(FragmentEditUsers())
    }
哈克·麦克切扬

直接从 Fragment 使用 Activity 不是一个好习惯,它会在未来成为一个错误的巢穴))第一个选项是SharedViewModel您可以在您的 Activity 和 Fragment 之间共享。但是如果你有简单的功能并且你不想在ViewModel这里参与,也许你不想要它。第二个选项,通常在之前使用Fragment Result API并且SharedViewModel是回调。我最喜欢的最后一个,它更干净的是Fragment Result API您可以在此处找到更多信息 - FragmentResultAPI使用它,您可以在活动到片段、反之亦然和片段到片段之间进行通信。

您需要一个 Gradle 依赖项才能使用它:

implementation "androidx.fragment:fragment-ktx:1.4.1"

在活动中,您必须设置一个FragmentResultListener. 它将请求密钥、生命周期和FragmentResultListener接口作为参数,该接口是一个 SAM 接口(只有 1 个功能)。如果你愿意,你可以在这里深潜。

const val REQUEST_KEY = "101"
const val BUNDLE_KEY = "B101"

// Activity code
supportFragmentManager.setFragmentResultListener(REQUEST_KEY, this) { requestKey, bundle ->
        if (requestKey == REQUEST_KEY) {
            // Here you can call the functions you desire
            Toast.makeText(this, bundle.getString(BUNDLE_KEY), Toast.LENGTH_SHORT).show()
        }
    }

现在让我们看看片段方面。我有一个按钮,点击后触发活动中的结果监听器:

// Fragment code
val btnTriggerActivity = view.findViewById<Button>(R.id.btn_trigger_activity)
    btnTriggerActivity.setOnClickListener {
        // This code will trigger the function in activity.
        // The activity will show the toast
        setFragmentResult(REQUEST_KEY, bundleOf(
            BUNDLE_KEY to "Hello from the other side :)"
        ))
    }

而已。这里还有一张来自开发者页面的图片,展示了使用FragmentResultApi.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

导航栏的Onclick侦听器

Django-使用Javascript onclick侦听器更改Dictsort?

如何防止onclick侦听器垃圾邮件?

如何在Xamarin中设置onclick侦听器?

如何使用JQuery设置onclick侦听器

如何在DropdownMenuItem上onClick侦听器

Kotlin OnClick侦听器

Javascript onclick侦听器

嵌套的onClick侦听器

在Android中的操作栏标题上设置OnClick侦听器

如何在Android中的片段中为按钮设置onclick侦听器

如何将onclick侦听器附加到Android Studio的导航抽屉活动中?

如何使用 onclick 事件侦听器一次更改多个元素的背景颜色?

打开或关闭导航抽屉时是否可以收听(例如:类似于按钮onclick的侦听器)?

抽屉/边栏模板中无法识别的Android onclick侦听器

如何从通过onclick侦听器单击的项目中检索数据

如何从firebase数据库onClick侦听器中删除最后一个节点?

如何使用react devtools将功能绑定到onClick事件侦听器

如何为列表首选项中的选项设置 onClick 侦听器?

JavaFX:如何将侦听器设置为TabPane标头的onClick事件

JavaFX:如何将侦听器设置为TabPane标头的onClick事件

如何阻止内联onclick事件并稍后在自己的Click侦听器中调用它?

如何从onclick访问setOnCheckedChangeListener侦听器中的变量值

如何在android数据绑定中将常量传递给onClick侦听器

如何获得相对于持有onclick侦听器的SVG元素的点击坐标?

如何在我的onClick处理程序中添加键盘侦听器?

如何在Android的onClick侦听器中获取类引用?

如何在 React 组件实例上使用 onClick 侦听器更新状态挂钩

如何将Onclick侦听器添加到回收者视图