我想在单击事件后调用 RecyclerView.Adapter 中的支持片段管理器,以便移动到不同的片段。我的做法:
(context as MainActivity).supportFragmentManager
.beginTransaction()
.replace(MainActivity.FRAGMENT_CONTAINER, TextScreen())
.commit()
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
kotlin.TypeCastException:null 无法转换为非 null 类型
你能帮助我吗?
2021 年更新 - Kotlin 答案
如果你想在Fragment中调用“supportFragmentManager”
activity.supportFragmentManager
Run Code Online (Sandbox Code Playgroud)
这是因为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()
}
Run Code Online (Sandbox Code Playgroud)
然后,在Activity初始化中MyAdapter:
myAdapter.setListener {
supportFragmentManager
.beginTransaction()
.replace(MainActivity.FRAGMENT_CONTAINER, TextScreen())
.commit()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17192 次 |
| 最近记录: |