How do I get the position selected in a RecyclerView?

前端 未结 13 2512
自闭症患者
自闭症患者 2020-11-27 04:40

I am experimenting with the support library\'s recyclerview and cards. I have a recyclerview of cards. Each card has an \'x\' icon at the top right corner to remove it:

13条回答
  •  天涯浪人
    2020-11-27 04:49

    To complement @tyczj answer:

    Generic Adapter Pseido code:

    public abstract class GenericRecycleAdapter extends RecyclerView.Adapter{ 
    
    private List mList;
    //default implementation code 
    
    public abstract int getLayout();
    
    @Override
        public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(getLayout(), parent, false);
            return getCustomHolder(v);
        }
    
        public Holders.TextImageHolder getCustomHolder(View v) {
            return new Holders.TextImageHolder(v){
                @Override
                public void onClick(View v) {
                    onItem(mList.get(this.getAdapterPosition()));
                }
            };
        }
    
    abstract void onItem(T t);
    
     @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        onSet(mList.get(position), (K) holder);
    
    }
    
    public abstract void onSet(T item, K holder);
    
    }
    

    ViewHolder:

    public class Holders  {
    
        public static class TextImageHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    
            public TextView text;
    
            public TextImageHolder(View itemView) {
                super(itemView);
                text = (TextView) itemView.findViewById(R.id.text);
                text.setOnClickListener(this);
    
    
            }
    
            @Override
            public void onClick(View v) {
    
            }
        }
    
    
    }
    

    Adapter usage:

    public class CategoriesAdapter extends GenericRecycleAdapter {
    
    
        public CategoriesAdapter(List list, Context context) {
            super(list, context);
        }
    
        @Override
        void onItem(Category category) {
    
        }
    
    
        @Override
        public int getLayout() {
            return R.layout.categories_row;
        }
    
        @Override
        public void onSet(Category item, Holders.TextImageHolder holder) {
    
        }
    
    
    
    }
    

提交回复
热议问题