首页 > 解决方案 > 具有动态标题的 Recyclerview 多视图类型

问题描述

我熟悉RecyclerView多个视图项。

最近我遇到了基于某些标准添加动态标题的问题。我试图用给定的数据来理解,但我的逻辑似乎不起作用

在这里,我有一个包含 4 个项目的自定义列表

{"en":"Candy"}, name='c1', id= 1}
{"en":"Bar"}, name='c2', id= 2}
{"en":"Bar"}, name='c3', id= 3 }
{"en":"Donut"}, name='c4', id= 4}

现在,如何在 中写入条件getViewType(intposition),以便生成带有标题视图的输出。

Candy
tv -> c1   tv->id1

Bar
tv ->c2     tv->id2 
tv ->c3     tv->id3

Donut
tv ->c4     tv -> id4

任何帮助将不胜感激。我从未致力于添加动态标题。

标签: androidandroid-recyclerview

解决方案


我假设列表项按顺序出现。然后在一个列表之后Candy,你将有一个列表,Bar然后是一个列表,Donut依此类推。我在 Github中有一个类似的实现,您可能会了解如何使用不同的视图类型来实现它。

我希望建议从原始列表中解析不同的列表,如下所示。

ArrayList<Sweet> candyList = getAllCandiesFromTheOriginalList();
ArrayList<Sweet> barList = getAllBarsFromTheOriginalList();
ArrayList<Sweet> donutList = getAllDonutsFromTheOriginalList(); 

获得所有列表后,您可以跟踪每个列表的大小并在getItemViewType函数中相应地获取视图类型。

// Initialize these variables in the constructor of your adapter
// Make these variables global, so that it can be used from other functions. 
int candyListSize = candyList.size();
int barListSize = barList.size();
int donutListSize = donutList.size();
int totalSize = candyListSize + barListSize + donutListSize;

int CANDY_HEADER_TYPE = 99;
int BAR_HEADER_TYPE = 98;
int DONUT_HEADER_TYPE = 97;

// I assume that candy, bar, and donut comes sequentially in your RecyclerView
@Override
public int getItemViewType(int position) {

    if (position == 0) return CANDY_HEADER_TYPE;
    else if (position == candyListSize + 1) return BAR_HEADER_TYPE;
    else if (position == candyListSize + barListSize + 2) return DONUT_HEADER_TYPE;

    return super.getItemViewType(position);
}

@Override
public int getItemCount() {
    return totalSize + 3; // As there will be 3 extra headers.
}

您还需要onBindViewHolder智能地实施您的。

这可能无法为您提供您遇到的问题的确切解决方案。但是,我希望这有助于您了解如何解决问题。


推荐阅读