Recyclerview动态部分不使用任何第3个库

时间:2016-03-27 11:10:20

标签: android android-recyclerview

我想在回收视图中添加标题我正在尝试使用

来实现它
 @Override
public int getItemViewType(int position) {
    // depends on your problem
    if (position == 0 || position == 4) {
        return 2;
    } else {
        return 1;
    }
}

 @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                  int viewType) {
    // create a new view
    if (viewType == 1) {
        View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.cardview_row, null);
        return new ViewHolder(itemLayoutView);

    } else if (viewType == 2) {
        View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.cardview_row1, null);
        return new ViewHolders(itemLayoutView);
    }


    return null;


}

但我怎么能在运行时做到这一点就像我不知道位置时应该显示的部分就像我有json

{
"DATA": [
    "hi",
    "heloo",
    "bye"
],
"MAHA": [
    "ans",
    "rs",
    "re",
    "jab",
    "bad"
]

}

其中data和maha是section我想显示其他元素

目前我正在制作所有元素的arraylist并添加硬核  部分的价值,但我如何使用上面的json

来做这个viva

2 个答案:

答案 0 :(得分:1)

您需要的是带有父母(标题)和孩子(条目)的可扩展回收者视图。干得好: https://github.com/bignerdranch/expandable-recycler-view

如果您想要始终显示条目而不从可扩展功能中获利,请执行以下操作:expAdapter.expandAllParents()。

我知道你不想使用第三届图书馆派对,但在我看来,这是处理它的最佳方式,并为你节省了大量时间。此外,如果其他人有同样的问题,他可能会觉得这个解决方案很有用。

答案 1 :(得分:0)

为您的JSON数据创建一个这样的类,并为每个节点创建一个Section类(在您的示例中,一个用于DATA,另一个用于MAHA):

class Section {
    String header;
    List<String> itemList;
}

然后创建自定义适配器:

public class SectionedRecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<Section> sectionList;

    public SectionedRecyclerViewAdapter(List<Section> sectionList) {
        this.sectionList = sectionList;
    }

    @Override
    public int getItemViewType(int position) {
        int currentPos = 0;

        for (Section section : sectionList) {
            // check if position is in this section
            // +1 for the header, -1 because idx starts at 0
            if (position >= currentPos && position <= (currentPost + section.itemList.size() + 1 - 1)) {
                if (position == currentPos) {
                    return 2; // header
                } else {
                    return 1; // item
                }
            }

            // +1 for the header
            currentPos += section.itemList.size() + 1;
        }

        throw new IndexOutOfBoundsException("Invalid position");
    }

    // use the onCreateViewHolder method from your question...
}

我知道您不想使用第三方库,但您可以检查SectionedRecyclerViewAdapter的getItemViewType方法是如何完成的here