在我的 RecyclerView 中,我需要将我的部分项目替换为我的 fragment 。但在回收站 View 中替换仅第一项。我做错了什么?
我的容器(在回收站 View 项目中):
...
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/container" />
...
我在 RecyclerView 适配器中的更新代码:
...
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
...
MyFragment fragment = MyFragment.newInstance("fragment1");
fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
...
}
...
最佳答案
我终于找到了解决方案。问题是我设置了一个通用容器 ID。但在回收商看来,需要为每件元素设置唯一容器 ID。
所以,我的代码现在是这样的:
MyFragment fragment = MyFragment.newInstance("fragment1");
fragmentManager.beginTransaction().replace(UNIQUE_CONTAINER_ID, fragment).commit();
如果有人有用,这是我的完整代码(回收站 View 中的实现 fragment ):
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()
关于android - RecyclerView 项目中的 fragment 替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37194653/