Expandable list with RecyclerView?

后端 未结 6 2113
天涯浪人
天涯浪人 2020-11-27 10:45

It\'s possible to use expandable list items with new RecyclerView? Like ExpandableListView?

6条回答
  •  庸人自扰
    2020-11-27 11:26

    This is the sample code for what is mentioned by @TonicArtos to add and remove Items and to animate it while doing, this is taken from RecyclerView Animations and GitHub sample

    1) Add Listener inside your onCreateViewHolder() to register for onClick

    2) Create your custom OnClickListener inside your Adapter

    private View.OnClickListener mItemListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TextView tv = (TextView) v.findViewById(R.id.tvItems);
            String selected = tv.getText().toString();
            boolean checked = itemsList.get(recyclerView.getChildAdapterPosition(v)).isChecked();
    
            switch (selected){
                case "Item1":
                    if(checked){
                        deleteItem(v);
                        itemsList.get(recyclerView.getChildAdapterPosition(v)).setChecked(false);
                    }else {
                        addItem(v);
                        itemsList.get(recyclerView.getChildAdapterPosition(v)).setChecked(true);
                    }
                    break;
                case "Item2":
                    if(checked){
                        deleteItem(v);
                        itemsList.get(recyclerView.getChildAdapterPosition(v)).setChecked(false);
                    }else {
                        addItem(v);
                        itemsList.get(recyclerView.getChildAdapterPosition(v)).setChecked(true);
                    }
                    break;                 
                default:
                    //In my case I have checkList in subItems,
                    //checkItem(v);
                    break;
            }
        }
    };
    

    3) Add your addItem() and deleteItem()

    private void addItem(View view){
        int position = recyclerView.getChildLayoutPosition(view);
        if (position != RecyclerView.NO_POSITION){
            navDrawItems.add(position+1,new mObject());
            navDrawItems.add(position+2,new mObject());
            notifyItemRangeInserted(position+1,2);
        }
    }
    
    
    private void deleteItem(View view) {
        int position = recyclerView.getChildLayoutPosition(view);
        if (position != RecyclerView.NO_POSITION) {
            navDrawItems.remove(position+2);
            navDrawItems.remove(position+1);
            notifyItemRangeRemoved(position+1,2);
        }
    }
    

    4) If your RecyclerViewAdapter is not in the same Activity as Recycler View, pass instance of recyclerView to the Adapter while creating

    5) itemList is a ArrayList of type mObject which helps maintain states of item (Open/Close) , name, type of Item(subItems/mainItem) and set Theme based on values

    public class mObject{
        private String label;
        private int type;
        private boolean checked;
    } 
    

提交回复
热议问题