How do I get the position selected in a RecyclerView?

前端 未结 13 2483
自闭症患者
自闭症患者 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:57

    No need to have your ViewHolder implementing View.OnClickListener. You can get directly the clicked position by setting a click listener in the method onCreateViewHolder of RecyclerView.Adapter here is a sample of code :

    public class ItemListAdapterRecycler extends RecyclerView.Adapter
    {
    
        private final List items;
    
        public ItemListAdapterRecycler(List items)
        {
            this.items = items;
        }
    
        @Override
        public ItemViewHolder onCreateViewHolder(final ViewGroup parent, int viewType)
        {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row, parent, false);
    
            view.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View view)
                {
                    int currentPosition = getClickedPosition(view);
                    Log.d("DEBUG", "" + currentPosition);
                }
            });
    
            return new ItemViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(ItemViewHolder itemViewHolder, int position)
        {
            ...
        }
    
        @Override
        public int getItemCount()
        {
            return items.size();
        }
    
        private int getClickedPosition(View clickedView)
        {
            RecyclerView recyclerView = (RecyclerView) clickedView.getParent();
            ItemViewHolder currentViewHolder = (ItemViewHolder) recyclerView.getChildViewHolder(clickedView);
            return currentViewHolder.getAdapterPosition();
        }
    
    }
    

提交回复
热议问题