RecyclerView 项中的片段替换 [英] Fragment replacing in RecyclerView item
问题描述
在我的 RecyclerView 中,我需要将我的项目的一部分替换为我的片段.但是在回收者视图中替换仅第一项.我做错了什么?
In my RecyclerView I need replace part of my item to my fragment. But replacing only first item in recycler view. What I am doing is wrong?
我的容器(在回收商视图项目中):
My container (in recycler view item):
...
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/container" />
...
我在 RecyclerView 适配器中的更新代码:
My update code in RecyclerView adapter:
...
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
...
MyFragment fragment = MyFragment.newInstance("fragment1");
fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
...
}
...
推荐答案
我终于找到了解决方案.问题是我设置了一个通用的容器 ID.但是在回收者视图中需要为每个项目设置唯一的容器 ID.
I finnaly found solution. The problem is I set a common container id. But in recycler view need to set unique container id for each item.
所以,我的代码现在是这样的:
So, my code now this:
MyFragment fragment = MyFragment.newInstance("fragment1");
fragmentManager.beginTransaction().replace(UNIQUE_CONTAINER_ID, fragment).commit();
如果有人有用,这是我的完整代码(回收者视图中的实现片段):
If someone will be useful, here is my complete code (implementation fragment in recycler view):
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position)
{
...
// Delete old fragment
int containerId = holder.mediaContainer.getId();// Get container id
Fragment oldFragment = fragmentManager.findFragmentById(containerId);
if(oldFragment != null) {
fragmentManager.beginTransaction().remove(oldFragment).commit();
}
int newContainerId = View.generateViewId();// Generate unique container id
holder.mediaContainer.setId(newContainerId);// Set container id
// Add new fragment
MyFragment fragment = MyFragment.newInstance("fragment1");
fragmentManager.beginTransaction().replace(newContainerId, fragment).commit();
...
}
更新:建议使用View.generateViewId()
这篇关于RecyclerView 项中的片段替换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!