android - RecyclerView 项目中的 fragment 替换

标签 android android-fragments android-recyclerview

在我的 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()

,而不是使用自己的方法生成唯一id

关于android - RecyclerView 项目中的 fragment 替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37194653/

相关文章:

android - 像文件一样读/写/dev/ttySDIO0?

java - 在 Android 上禁用声音 正在进行的通知更新

android - 无法添加 Xamarin.Facebook.AudienceNetwork.Android 包

android - RecyclerView - 在 notifiyItemInserted(0) 之后保持在 0 位置

android - 将 OSMDroid 与 fragment 集成

android - RecyclerView 列表中的最后一项位置错误

java - 如何从 fragment 中禁用 Activity 的抽屉导航

android - ViewModel发出多次而不是一次发出

java - 从 Android 中的回收器适配器调用 Activity 方法的正确方法?

android - 使用 Android 的 RecyclerView 时在滑动行下添加带有文本/图标的彩色背景