我完全绝望了。我尝试从一个片段打开/替换到另一个片段,但我只能在Activity中找到文档或Java中(使用getFragmentManager()方法,似乎在Kotlin中不存在)。
supportFragmentManager仅在Activity内部可用,而我正在使用一个片段和适配器。
你能帮帮我吗?
我认为展示我的代码是无意义的,因为它只会导致错误。
没有一种答案对我起作用。 我尝试了其他方法并创建了一个接口:
但是我得到的唯一结果就是第二个片段放在第一个片段上,即使我调用了“a:”:
supportFragmentManager仅在Activity内部可用,而我正在使用一个片段和适配器。
你能帮帮我吗?
我认为展示我的代码是无意义的,因为它只会导致错误。
没有一种答案对我起作用。 我尝试了其他方法并创建了一个接口:
interface AdapterCallbackAlbum {
fun onClickItem(album: Album)}
并在我的第一个碎片中实现这个功能
class ListAlbumsFragment : Fragment(), AdapterCallbackAlbum {
override fun onClickItem(album: Album) {
val fragment = ListTracksFragment.newInstance()
val transaction = childFragmentManager.beginTransaction()
transaction.replace(R.id.album_fragment, fragment)
transaction.commit()
}
最后是适配器:
class AlbumAdapter(val context: Context, private val
adapterCallbackAlbum: AdapterCallbackAlbum): Adapter<ViewHolder>() {
override fun onBindViewHolder(holder: RecyclerView.ViewHolder,
position: Int) {
val album = albumList[position]
holder.itemView.setOnClickListener {
adapterCallbackAlbum.onClickItem(album)
}}
但是我得到的唯一结果就是第二个片段放在第一个片段上,即使我调用了“a:”:
transaction.remove(ListAlbumFragment.newInstance())
我的一个朋友终于解决了我的问题(也许可以帮助其他人)。
override fun onClickItem(album: Album) {
val fragment = ListTracksFragment.newInstance()
val transaction = fragmentManager.beginTransaction()
transaction.replace(R.id.content, fragment)
transaction.addToBackStack(null)
transaction.commit()
}
问题在于我们从MainActivity开始,它加载了一个fragment,在这个fragment中,我们需要在点击事件中加载另一个fragment。因此要替换的fragment不是当前的fragment,而是main_activity.xml的内容。
感谢大家的快速回答。