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

查看:124
本文介绍了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();

...

}

更新.:建议不要使用自己的方法来生成唯一ID,而建议使用View.generateViewId()

Upd.: Instead of using your own method to generate a unique id, it is recommended to use View.generateViewId()

这篇关于RecyclerView项目中的片段替换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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