标签: android-concatadapter

ConcatAdapter 中的多个 LayoutManager

我想实现一个像下图这样的 ConcatAdapter:

在此输入图像描述

此页面的 recyclerView 包含以下元素:

  • 标题
  • 水平recyclerView(带分页)
  • 标题
  • 垂直recyclerView(无分页)
  • 标题
  • 水平recyclerView(带分页)

但问题是,据我所知,我只能将一个 LayoutManager 设置为包含 ConcatAdapter 的 recyclerView 。

如何为每个适配器设置不同的布局管理器?或者任何其他解决方案来使用 CocantAdapter 实现此页面?

(为什么是ConcatAdapter?因为据我所知,即使使用recyclerViewPool,它也解决了nestedRecyclerView的性能问题)

android android-recyclerview nestedrecyclerview android-mergeadapter android-concatadapter

6
推荐指数
1
解决办法
2449
查看次数

ConcatAdapter 导致 getItemViewType() 返回错误值?

我有一个 RecyclerView 适配器,它可以处理我多年来一直使用的几种视图类型。最近,我发现了ConcatAdapter,但我似乎遇到了一个问题,它似乎返回了错误的值getItemViewType()

我有一个用例,我想显示标题及其下方的项目列表。我已经为标题创建了一个新的适配器类,但列表项将继续使用我的旧适配器(它还处理其他几种视图类型)。

所以我连接了两个适配器:

HeaderAdapter headerAdapter = new HeaderAdapter(context);
PostAdapter postAdapter = new PostAdapter(context, postData);

ConcatAdapter concatAdapter = new ConcatAdapter(headerAdapter, postAdapter);
recyclerView.setAdapter(concatAdapter);
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是当我打开活动时,它立即崩溃并给出错误:

java.lang.ClassCastException:com.myapp.android.adapter.PostAdapter$PostViewHolder 无法转换为 com.myapp.android.adapter.PostAdapter$FooterViewHolder

这是没有意义的,因为我什至从未在回收器视图中添加页脚。

我的getItemViewType()方法PostAdapter看起来像这样:

@Override
public int getItemViewType(int position) {
    if (data.get(position) instanceof Footer) {
        return TYPE_FOOTER;
    } else if (data.get(position) instanceof Post) {
        return TYPE_POST;
    }

    return -1;
}
Run Code Online (Sandbox Code Playgroud)

我的onBindViewHolder()看起来像这样:

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    switch (holder.getItemViewType()) {
        case TYPE_FOOTER:
            FooterViewHolder …
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview android-concatadapter

5
推荐指数
2
解决办法
3655
查看次数