- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何创建一个 RecyclerView,其 ViewHolder 子级实际上是 Fragments?
当前示例(不起作用, View 堆叠在彼此之上)
这是一个 Fragment 的 onResume(),它是 Activity 的主要内容
// onResume() in FragmentA (main content of an Activity)
recyclerView.addItemDecoration(new VerticalSpaceItemDecoration(5));
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
List<Fragment> fragments = new LinkedList<>();
fragments.add(FeaturedRecyclerFragment.newInstance(R.string.recycler_title_featured));
fragments.add(TrendingRecyclerFragment.newInstance(R.string.recycler_title_trending));
FeedsAdapter recyclerAdapter = new FeedsAdapter(getContext(), getFragmentManager(), fragments);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(recyclerAdapter);
这是 RecyclerView 适配器代码:
public class FeedsAdapter extends RecyclerView.Adapter<FeedsAdapter.FeedsViewHolder> {
private static final String TAG = FeedsAdapter.class.getSimpleName();
private final Context context;
private FragmentManager fragmentManager;
private final List<Fragment> fragments;
public FeedsAdapter(Context context, FragmentManager fragmentManager, List<Fragment> fragments) {
this.context = context;
this.fragmentManager = fragmentManager;
this.fragments = fragments;
}
@Override
public FeedsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.d(TAG, "onCreateViewHolder()");
View itemView = LayoutInflater.from(context).inflate(R.layout.feeds_view_holder, parent, false);
return new FeedsViewHolder(itemView);
}
@Override
public void onBindViewHolder(FeedsViewHolder holder, int position) {
Log.d(TAG, "onBindViewHolder() " + position);
if (fragmentManager == null) {
throw new IllegalArgumentException("LoaderManager null, cannot bind view holder");
}
Fragment fragment = fragments.get(position);
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(holder.itemView.getId(), fragment, TAG + "pos" + position);
transaction.commit();
}
@Override
public int getItemCount() {
Log.d(TAG, "getItemCount()");
return fragments.size();
}
static class FeedsViewHolder extends RecyclerView.ViewHolder {
public FeedsViewHolder(View itemView) {
super(itemView);
}
}
}
最后,这是在 FeedsAdapter 中膨胀的 feeds_view_holder 布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recycler_fragment_container">
</FrameLayout>
基本上,问题是 RecyclerView 没有以预期的方式加载它的子项(ViewHolders)。他们在彼此之上。我希望 RecyclerView 将 fragment 加载为 View 而不是绑定(bind)的典型 View 。这可能吗?我想我可以放弃 RecyclerView,但加载的内容相当动态(例如,有一个“最喜欢的提要”部分,但如果您没有任何最喜欢的内容,则不会显示)。当我将 RecyclerView 与包含 RecyclerView 的 ViewHolder 子级一起使用时,一切正常,但我想尽可能使用 Fragment。
最佳答案
这不是个好主意。
由于您永远不会回收或删除当前设计中的 fragment ,因此最好使用 ScrollView围绕 LinearLayout fragment 被加载到。与使用 RecyclerView 相比, fragment 的加载速度稍快,但您不必与所有未利用的回收基础设施作斗争。
fragment 正在彼此叠加加载,因为当您提交事务时,您实际上并没有更改 View 。你是在告诉 fragment 管理器,“嘿,有机会的话你能把这个 fragment 连接到这个 ViewGroup ID 吗?” fragment 管理器与它找到的该 View ID 的第一个实例一起使用,因此它们被加载到彼此之上。
您可以通过为不同的职位设置不同的 ID 来解决这个问题,但我不推荐这样做。
关于android - 作为 RecyclerView 的 ViewHolder 的 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36046940/
我在另一个 RecyclerView(parentRecyclerView) 中实现了 RecyclerView(childRecyclerView),图片说明了所有的实现: 我想编写一个 espre
我正在构建一个应用程序,它使用ViewPager2在页面之间水平滚动,每个页面都有一个垂直滚动的内容RecyclerView,其中每个列表的第一个位置都有一行水平滚动小部件,例如附加到寻呼机指示器类型
我正在尝试实现一个水平的 recyclerview 并且 recyclerview 的每个项目都将是一个具有网格布局的垂直 recyclerview。我面临的问题是,当我尝试垂直滚动子 recycle
我使用显示条目列表的 RecyclerView。每个条目都托管另一个 RecyclerView,它是一个图像列表。 我现在想让这个嵌套的 RecyclerView 可点击,而不是它的项目,而是整个 V
我正在尝试将手机中的图像加载到我的回收 View 中。 到目前为止,我已经创建了一个 recyclerview.adapter 和一个 gridlayoutmanager,并将它们附加到我的 recy
我需要一个可扩展 View ,其中父/可扩展标题将具有文本和下拉箭头。每个此类标题的子项应该是在网格结构中具有多个项目的 View 。 (有点像带有 GridLayoutManager 的回收器 Vi
我正在使用显示不同类别列表的 RecyclerView。每行项目还包含 RecyclerView 以显示类别项目列表。父级 RecyclerView 由垂直 LinearLayoutManager 填
我正在更新一个旧的 Android 项目,现在我从 RecyclerView 中反复收到这条日志语句: W/RecyclerView:RecyclerView 不支持滚动到绝对位置。改为使用 scro
在我的 Adapter 中,我调用 LayoutManager.ChildAt(position) 来获取 itemview,但是我得到的 View 不是匹配的 itemview,当我调用 notif
我正在从 ListView 迁移到 RecyclerView,但是在 SQLite 中输入一些数据后,我的列表没有使用 notifyDataSetChanged() 更新;所以我总是要调用setAda
我正在用 Google Now Cards 的风格创建一组 5 张卡片。我首先关注的是总体布局。 我正在使用 CardView 和 RecyclerView ,我想要实现的是这样的: 这是我的 Car
在我的应用程序中,我有一个 RecyclerView,其中包含一个简单的项目 View ,每行包含一个 TextView 和一个 Spinner。 用户从操作栏中单击“保存”后,我需要遍历所有项目并获
我正在尝试检查 RecyclerView 中是否可以看到某些特定项目;但我无法实现。请帮助我确定我的项目是否在 RecyclerView 中完全可见。 mrecylerView.addOnScroll
我有一个提要片段,它的主要元素是帖子的 RecyclerView。 我正在使用 Lisa Wray 的 Groupie 库管理回收站 https://github.com/lisawray/group
我有这两个类似的行为回收器 View 适配器,它们之间的唯一区别是 onclick 方法和传递给它们的对象。所以,我正在考虑将类 B 设计为从回收器 View 适配器继承,这样我就可以更改构造函数来执
这很奇怪。我对这个问题感到沮丧。我将数据保存在 ArrayList 中。当我将数据放在 RecyclerView 上时。数据未显示在列表中。这是我的代码 listOrder.forEach { ord
编辑我通过使用 CoordinatorLayout 和 AppBarLayout 作为 header 和 TabLayout 的包装解决了这个问题。本来应该很明显,但是哦,好吧。 原始问题:我有一个设
我有一个回收 View 。我想从其适配器类更新回收器 View 。我尝试了 notiftDataSetChanged( ) 但它只适用于主类。下面是 recyclerview 适配器类的代码。 pac
我正在使用具有不同 viewholders 的 recyclerview(具有垂直 LinearLayout),其中一个有另一个 RecyclerView(带有水平 LL)。在第二个 recycler
我想创建一个与 Google Play Store 或 Netflix App 类似的布局,其中在单个 RecyclerView 中基本上有多个水平 RecyclerView。如果这不是他们做事的方式
我是一名优秀的程序员,十分优秀!