带有多个ArrayList的粘性标头RecyclerView [英] Sticky Header RecyclerView with multiple ArrayLists

查看:97
本文介绍了带有多个ArrayList的粘性标头RecyclerView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 RecyclerView 实现粘性标头.我有三个部分(即3个粘性标题),它们工作正常.现在我在每个部分中获取了三个arraylists,我已经在适配器中初始化了这些列表,并且我试图根据内部的header id获取这些列表的数据. onBindViewHolder .但这并没有给我完整的列表,只是每个列表中的一个字符串(例如,第一部分-mylist第一位置的数据,第二部分-mylist1第二位置的数据-第三部分--mylist2第三位置的数据)

I am implementing sticky header with RecyclerView. I have three sections (i.e 3 sticky headers) and they are working fine.Now I have taken three arraylists inside each section, I have initialized these list in my adapter and I am trying to get data of these lists on basis of header id inside onBindViewHolder. But it is not giving me the full list,just one string from each list (i.e under first section--data on first position of mylist,,,under second section-- data on second position of mylist1 ---under third section-- data on third position of mylist2)

请帮助!!

上下文中的代码:

StickyTestAdapter

StickyTestAdapter

public class StickyTestAdapter extends RecyclerView.Adapter<StickyTestAdapter.ViewHolder> implements
        StickyHeaderAdapter<StickyTestAdapter.HeaderHolder> {

    private Context mContext;
    private ArrayList<String> mylist;
    private ArrayList<String> mylist1;
    private ArrayList<String> mylist2;
    private static  int countposition;
    private String HEADER_FIRIST="HEADER_FIRIST";
    private String HEADER_SECOND="HEADER_SECOND";
    private String HEADER_THIRD="HEADER_THIRD";

    public StickyTestAdapter(Context context) {
        prepareData();
        prepareData1();
        prepareData2();
        this.mContext=context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        final View view = LayoutInflater.from(mContext).inflate(R.layout.item_test, viewGroup, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {


       long rowType= getHeaderId(position);
        Log.e("getHeaderId----",""+rowType);

        if (rowType==0){

            if(!mylist.equals(""))
            {
                Log.e("list_data----", "" + mylist.get(position));
                viewHolder.item.setText(mylist.get(position));
            }
            else
            {
                Log.e("Error--0--", "" + "error");
            }


        } else if (rowType==1){

            if(!mylist1.equals(""))
            {
                Log.e("list_data1----", "" + mylist1.get(position));
                viewHolder.item.setText(mylist1.get(position));
            }
            else
            {
                Log.e("Error---1-", "" + "error");
            }

        } else if (rowType==2){

            if(!mylist2.equals(""))
            {
                Log.e("list_data2----", "" + mylist2.get(position));
                viewHolder.item.setText(mylist2.get(position));
            }
            else
            {
                Log.e("Error----2", "" + "error");
            }
        }
    }


    @Override
    public int getItemCount() {

        if (getHeaderId(countposition)==0){
            Log.e("mylist",""+mylist.size());
            return mylist.size();


        }else  if (getHeaderId(countposition)==1){
            Log.e("mylist1",""+mylist1.size());
            return mylist1.size();
        }else if (getHeaderId(countposition)==2){
            Log.e("mylist2",""+mylist2.size());
            return mylist2.size();
        }
        return 0;
    }

    @Override
    public long getHeaderId(int pos) {
        return pos;
    }

    @Override
    public HeaderHolder onCreateHeaderViewHolder(ViewGroup parent) {
        final View view = LayoutInflater.from(mContext).inflate(R.layout.header_test, parent, false);

        return new HeaderHolder(view);
    }

    @Override
    public void onBindHeaderViewHolder(HeaderHolder viewholder, int count) {
       countposition=count;

        if (getItemViewType(count)==0){
            viewholder.headertext.setText(HEADER_FIRIST);

        }else  if (getItemViewType(count)==1){
            viewholder.headertext.setText(HEADER_SECOND);

        }else if (getItemViewType(count)==2){
            viewholder.headertext.setText(HEADER_THIRD);
        }

    }


    static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView item;

        public ViewHolder(View itemView) {
            super(itemView);

            item = (TextView)itemView.findViewById(R.id.text_item);
        }
    }

    static class HeaderHolder extends RecyclerView.ViewHolder {
        public TextView headertext;

        public HeaderHolder(View itemView) {
            super(itemView);

            headertext = (TextView)itemView.findViewById(R.id.header_text);
        }
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }



    public void prepareData()
    {
        mylist=new ArrayList<>();
        mylist.add("rajendra");
        mylist.add("rani");
        mylist.add("rahul");
    }

    public void prepareData1()
    {
        mylist1=new ArrayList<>();
        mylist1.add("ravi");
        mylist1.add("vikram");
        mylist1.add("rakesh");

    }

    public void prepareData2()
    {
        mylist2=new ArrayList<>();
        mylist2.add("apple");
        mylist2.add("ashok");
        mylist2.add("vikash");

    }


}

推荐答案

问题已经很久了.但是该代码看起来很复杂,我个人不尝试通过创建库来重塑他人的出色表现.GitHub上有很多您可以导入的源代码.一些示例: FlexibleAdapter 环氧树脂 和其他

Question is quite old. But that code looks complicated to read, personally I try to not reinvent what others did quite well by creating libraries. GitHub is full of source that you can import. Some examples: FlexibleAdapter, FastAdapter, Epoxy and others.

我已经构建了第一个,但是您也可以尝试其他的.对于我的来说,拥有多个带有节的视图和标题非常容易,我在这里指出了维基页面,其中我定义了该部分以及如何对其进行初始化.

I have build the first one, but you can try the others as well. With mine, having multiple views and headers with sections is quite easy, I point here the wiki page where I define the section and how to initialize it.

与此功能一起,您还具有很多功能,使您的生活更轻松.

Along with this feature, you have a lot more functionalities that makes your life easier.

这篇关于带有多个ArrayList的粘性标头RecyclerView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆