我想在单击事件后调用 RecyclerView.Adapter 中的支持片段管理器,以便移动到不同的片段。我的做法:
(context as MainActivity).supportFragmentManager
                            .beginTransaction()
                            .replace(MainActivity.FRAGMENT_CONTAINER, TextScreen())
                            .commit()
但我收到以下错误:
kotlin.TypeCastException:null 无法转换为非 null 类型
你能帮助我吗?
2021 年更新 - Kotlin 答案
如果你想在Fragment中调用“supportFragmentManager”
activity.supportFragmentManager
这是因为Context适配器中的实例不能保证是Activity. 它可能是一个作为基地的ContextWrapper基地。试图解开这个包裹是很脆弱的。ActivityContext
相反,我建议您在适配器中定义一个接口。从您的 中Activity,向您的适配器提供该接口的实现,该适配器将执行FragmentTransaction. 例如:
class MyAdapter : RecyclerView.Adapter<MyType> {
    private var listener: (() -> Unit)? = null
    fun setListener(listener: (() -> Unit)?) {
        this.listener = listener
    }
    // wherever your onClick is handled:
    listener?.invoke()
}
然后,在Activity初始化中MyAdapter:
myAdapter.setListener {
    supportFragmentManager
        .beginTransaction()
        .replace(MainActivity.FRAGMENT_CONTAINER, TextScreen())
        .commit()
}
| 归档时间: | 
 | 
| 查看次数: | 17192 次 | 
| 最近记录: |