简体   繁体   English

使用sort动态将头从arraylist添加到recyclerView

[英]Dynamically Add header to recyclerView from arraylist using sort

i have json which converted into model 我有转换成模型的json

 Arraylist<model> data 

so i want to add header as per type in json so if there are 2 different type in arraylist then there would be 2 header in recyclerView and associated data as list . 所以我想按json中的类型添加标头,因此,如果arraylist中有2种不同的类型,那么recyclerView中将有2个标头,并将相关数据作为list。 so current example i have 2 typ2 - 1)name 2)value so how i can add 2 header in to recyclerView and then all data which having type as name 所以当前示例我有2个typ2-1)name 2)value,所以我如何在recyclerView中添加2个标头,然后将所有类型为name的数据添加

json JSON

{
"info": [
    {
        "Id": 12,
        "Name": "hi",
        "Type": "name"
    },
    {
        "Id": 1,
        "Name": "hi1",
        "Type": "name"
    },
    {
        "Id": 13,
        "Name": "hi",
        "Type": "value"
    },
    {
        "Id": 15,
        "Name": "hi3",
        "Type": "name"
    },
    {
        "Id": 16,
        "Name": "hi",
        "Type": "value"
    },
    {
        "Id": 20,
        "Name": "hi5",
        "Type": "value"
    },
    {
        "Id": 24,
        "Name": "bye",
        "Type": "name"
    },
    {
        "Id": 12,
        "Name": "hi",
        "Type": "name"
    }
]

} See image fro details } 查看图片

I assume your layout designs is ready as your given image link. 我认为您的布局设计已经准备就绪,可以作为给定的图像链接。 Basically you need 02 layout designs where one is for header & another is for footer in each item. 基本上,您需要02布局设计,其中一项用于页眉,另一项用于页脚。 Now, you can add header dynamically by using your adapter as following: 现在,您可以通过使用适配器来动态添加标头,如下所示:

public class YourRecyclerViewAdapter extends RecyclerView.Adapter {

    private final int VIEW_ITEM_HEADER = 1;  // type: name/value
    private final int VIEW_ITEM_FOOTER = 0;

    private List<PojoModel> mData;
    private Context mContext;

    public YourRecyclerViewAdapter(Context context, List<PojoModel> data)     {
        this.mContext = context;
        this.mData = data;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        RecyclerView.ViewHolder viewHolder;
        if (viewType == VIEW_ITEM_HEADER) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_header, parent, false);
            viewHolder = new HeaderHolder(view);
        } else {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_footer, parent, false);
            viewHolder = new FooterHolder(view);
        }
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        PojoModel item = mData.get(position);
        if (holder instanceof HeaderHolder) {
            HeaderHolder mHolder = (HeaderHolder)holder;
            // do your stuff
        } else {
            FooterHolder mHolder = (FooterHolder)holder;
            // do your stuff
        }
    }

    @Override
    public int getItemViewType(int position) {
        return mData.get(position) != null ? VIEW_ITEM_HEADER : VIEW_ITEM_FOOTER;
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public class HeaderHolder extends RecyclerView.ViewHolder {

        public HeaderHolder(View itemView) {
            super(itemView);
            // declare your header views
        }
    }

    public class FooterHolder extends RecyclerView.ViewHolder {

        public FooterHolder(View itemView) {
            super(itemView);
            // declare your footer views
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM