RecyclerView 项中的片段替换 [英] Fragment replacing in RecyclerView item

查看:22
本文介绍了RecyclerView 项中的片段替换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆