【问题标题】:how to fragment Method in activity如何在活动中分割方法
【发布时间】:2020-05-19 05:20:31
【问题描述】:

我想要 MVVM 模式中的权限可见性

我的 ViewModel 代码:

private val _permissionVisibility = MutableLiveData<Boolean>(ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS) != PERMISSION_GRANTED)
    val permissionVisibility: LiveData<Boolean>
        get() = _permissionVisibility

fun permissionDialog() {
        val permissions = arrayOf(Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.READ_CONTACTS)
        val REQUEST_PERMISSION_LIST = 2222
                        ActivityCompat.requestPermissions(activity!!, permissions, REQUEST_PERMISSION_LIST)
    }

我的 XML 代码:

android:visibility="@{ViewModel.permissionVisibility ? View.VISIBLE : View.GONE}"
app:onSafeClick="@{()-> ViewModel.permissionDialog()}"

我想要什么:

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray)

在片段中回调,而不是在活动中 这个回调值作为一个活动进来

我不知道如何从这里的碎片中得到它

你能帮帮我吗?

【问题讨论】:

  • 如果你想让Fragment获取回调,那么不要使用Activity调用它,使用Fragment。

标签: android android-fragments kotlin permissions


【解决方案1】:

您需要在Fragment 上调用requestPermissions() 以获取对Fragment 的onRequestPermissionsResult() 的回调:

fun permissionDialog() {
    val permissions = arrayOf(Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.READ_CONTACTS)
    val REQUEST_PERMISSION_LIST = 2222
    fragment!!.requestPermissions(permissions, REQUEST_PERMISSION_LIST)
}

由于您不应该在 ViewModel 中保留对 Activity 或 Fragment 的任何引用(因为如果在 Fragment 被销毁后保留它会导致内存泄漏),此代码应该真的在你的 Fragment 中。

【讨论】:

  • 但是这样做的行为被认为是业务逻辑,所以在视图模型中不正确吗?
  • 您通过在 ViewModel 中引用您的 Activity/Fragment 来解决更难的架构层问题。您当然可以让您的 ViewModel 向您的 Fragment 发送信号以运行代码,但此时您并没有真正测试任何东西,而是为了重定向而添加重定向,IMO。
猜你喜欢
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多