当我单击recyclerView内的项目时,如何替换片段
我已经尝试在适配器的onClickListener内部
childFragmentManager
.beginTransaction()
.replace(R.id.framefragment2, Fragment2())
.commit()
如果没有成功,它将返回我
java.lang.IllegalArgumentException: No view found for id 0x7f0a0137 (com.test.justaapp:id/framefragment1) for fragment Fragmetnone{1ebd5fc #0 id=0x7f0a0137}
这是第一个片段的mi xml已经被夸大了
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/framefragment1"
android:layout_width="match_parent"
android:layout_height="match_parent">
和第二帧布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#C0C0C0">
<FrameLayout
android:id="@+id/framefragment2"
android:layout_width="match_parent"
android:layout_height="match_parent">
我一直在搜索几个小时,无法正常工作,有什么想法吗?也许我在说些简单的东西,对您的帮助会很高兴。
答案 0 :(得分:0)
您可以在ViewHolder上实现一个接口,然后从活动中将此接口的实现传递给适配器。在适配器中,您可以在创建CustomViewHolder实例(创建方法)时传递实现。
在您的活动/片段中:
private val adapter = YourAdapter(object: CustomViewHolder.Listener {
fun onClick() {
// change the fragment here with the fragment manager of your activity/fragment.
}
})
在适配器中:
class YourAdapter(private val listener: CustomViewHolder.Listener): RecyclerView.Adapter {
...
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return CustomViewHolder(
LayoutInflater.from(context).inflate(R.layout.view_layout, parent, false),
listener
)
}
}
ViewHolder实现:
class CustomViewHolder(view: View, private val listener: Listener): ViewHolder(view) {
...
interface Listener {
fun onClick()
}
fun onCreate(parent: View, listener: Listener): CustomViewHolder {
// inflate the view and return an instance of CustomViewHolder
}
fun onBind() {
button.setOnClickListener {
listener.onClick()
}
}
}
我没有测试这段代码,但是逻辑就在这里。您只需要使其适应您的项目即可。