RecyclerVIew onItemClickListener Not working

后端 未结 6 1240
一个人的身影
一个人的身影 2021-01-28 02:20

I am working on RecyclerView and try to using on click listener for each item of recyclcerview using Interface

Here is my Activity cla

相关标签:
6条回答
  • 2021-01-28 03:01

    Check this sample

    OnCLick can be achived using Custom Interface

    interface Listener {
        void performOperation(int Position);
    }
    

    in Your Adapter

    private Listener mListener;
    

    In your Adapter initialize your listner in constructor like this

    mListener = (Listener) context;
    

    In your bindViewHolder method

    holder.yourView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                mListener.performOperation(position);
            }
        });
    

    Now in your Activity implement that interface like this

    public class LegacyHomeActivity extends ActivityBaseDrawer implements listner {
    
    @Override
    public void performOperation(int Position) {
        //Do whatever you want to do with this position
    }
    
    }
    
    0 讨论(0)
  • 2021-01-28 03:01
    @Override
    public void onBindViewHolder(RecyclerViewAdapter.ItemViewHolder holder, int position) {
            holder.name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
            }
        });
    
    }
    

    Try like this

    0 讨论(0)
  • 2021-01-28 03:03

    Pass onVideosRVItemClickListener in your ItemViewHolder constructor.

    @Override
        public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = getLayoutInflater().inflate(R.layout.layout_legacy_mode_home_video_item, parent, false);
            return new ItemViewHolder(view, onVideosRVItemClickListener);
        }
    
        @Override
        public void onBindViewHolder(ItemViewHolder holder, final int position) {
            Video video = videoList.get(position);
            Picasso.with(mContext).load(video.getThumb()).into(holder.categoryImage);
            holder.categoryName.setText(video.getTitle());
            holder.title_image_btn.setText(video.getDisplayType());
    
        }
    
        public class ItemViewHolder extends RecyclerView.ViewHolder {
            private TextView categoryName;
            private ImageView categoryImage;
            private Button title_image_btn;
    
            public ItemViewHolder(View itemView, final LegacyVideoClickListener videosRVItemClickListener) {
                super(itemView);
                categoryName = (TextView) itemView.findViewById(R.id.categoryName);
                categoryImage = (ImageView) itemView.findViewById(R.id.categoryImage);
                title_image_btn = (Button) itemView.findViewById(R.id.title_image_btn);
    
                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        videosRVItemClickListener.onItemClickListener(getAdapterPosition());
                    }
                });
            }
    
        }
    
    0 讨论(0)
  • 2021-01-28 03:08
        class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    
            public Button btMyButton;
    
            public ViewHolder(View itemView) {
                super(itemView);
                itemView.setOnClickListener(this);
            }
    
            @Override
            public void onClick(View v) {
                   // your implementation. In order to get position you can use `getAdapterPosition()` method               
           }
        }
    
    0 讨论(0)
  • 2021-01-28 03:09

    Your interface adapter class should be like this

    public class LegacyModeHomeAdapter extends RecyclerView.Adapter<LegacyModeHomeAdapter.ItemViewHolder> {
        private List<Video> videoList;
        private Context mContext;
        public static LegacyVideoClickListener onVideosRVItemClickListener;
    
        private LayoutInflater getLayoutInflater() {
            return LayoutInflater.from(mContext);
        }
    
        public LegacyModeHomeAdapter(Context mContext, LegacyVideoClickListener onVideosRVItemClickListener) {
            this.mContext = mContext;
            this.onVideosRVItemClickListener = onVideosRVItemClickListener;
        }
    
        public void setVideos(List<Video> videosList) {
            this.videoList = videosList;
            notifyDataSetChanged();
        }
    
        @Override
        public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = getLayoutInflater().inflate(R.layout.layout_legacy_mode_home_video_item, parent, false);
            return new ItemViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(ItemViewHolder holder, final int position) {
            Video video = videoList.get(position);
       Picasso.with(mContext).load(video.getThumb()).into(holder.categoryImage);
            holder.categoryName.setText(video.getTitle());
            holder.title_image_btn.setText(video.getDisplayType());
            holder.VideosItemClickListener(position, onVideosRVItemClickListener);
        }
    
        @Override
        public int getItemCount() {
            if (videoList != null) {
                return videoList.size();
            }
            return 0;
        }
    
        public class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
            private TextView categoryName;
            private ImageView categoryImage;
            private Button title_image_btn;
    
            public ItemViewHolder(View itemView) {
                super(itemView);
                categoryName = (TextView) itemView.findViewById(R.id.categoryName);
                categoryImage = (ImageView) itemView.findViewById(R.id.categoryImage);
                title_image_btn = (Button) itemView.findViewById(R.id.title_image_btn);
                itemView.setOnClickListener(this);
            }
    
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                onVideosRVItemClickListener.onItemClickListener(getPosition(), v);
            }
        }
        public void setOnItemClickListener(LegacyVideoClickListener clickListener) {
                LegacyModeHomeAdapter.onVideosRVItemClickListener = clickListener;
        }
        public interface LegacyVideoClickListener {
            public void onItemClickListener(int position, View v);
        }
    }
    

    And your adapter usage class should be like this

    adapter.setOnItemClickListener(new LegacyModeHomeAdapter.LegacyVideoClickListener() {
            @Override
            public void onItemClick(int position, View v) {
                //Your code
            }
        });
    

    Using this way of interface settings you can achieve the onclick listener function exactly. Please let me know if you are having trouble still.

    0 讨论(0)
  • 2021-01-28 03:22

    You this approach:

    @Override 
        public void onBindViewHolder(final ViewHolder holder, int position) {
            final String element = mDataset[position];
    
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   //your code 
                }
            });
        }
    
    0 讨论(0)
提交回复
热议问题