Theo
Theo

Reputation: 3149

Click on RecyclerView doesn't work

I tried this many times, but now I am having trouble clicking on a GridView.

Here is my adapter.

public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MoviesViewHolder>{

            private Context context;
            private List<Movies> moviesList;


            final private MoviesAdapterOnClickHandler mClickHandler;

            public interface MoviesAdapterOnClickHandler{
                void onClick(String movieId);
            }


            public MoviesAdapter(Context context, List<Movies> moviesList, MoviesAdapterOnClickHandler mClickHandler ){
                this.context = context;
                this.moviesList = moviesList;
                this.mClickHandler = mClickHandler;
            }


            @Override
            public MoviesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                Context context = parent.getContext();
                int layoutIdForListItem = R.layout.movies_row;
                LayoutInflater inflater = LayoutInflater.from(context);

                boolean shouldAttactToParentImmediately = false;

                View view = inflater.inflate(layoutIdForListItem,parent,shouldAttactToParentImmediately);

                MoviesViewHolder moviesViewHolder = new MoviesViewHolder(view);

                return moviesViewHolder;
            }

            @Override
            public void onBindViewHolder(MoviesViewHolder holder, int position) {

                Movies movies = moviesList.get(position);


                Picasso.with(context)
                        .load(NetworkUtils.getImageURL(movies.getImageThumbnail()))
                        .placeholder(R.drawable.ic_broken_image)
                        .into(holder.mMovieImage);

                Log.v("MovieAdapter",NetworkUtils.getImageURL(movies.getImageThumbnail()));

            }



            @Override
            public int getItemCount() {
                return moviesList.size();
            }

            public void setMoviesData(List<Movies> moviesList){
                this.moviesList = moviesList;
                notifyDataSetChanged();
            }

            public class MoviesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

                ImageView mMovieImage;

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

                    mMovieImage = itemView.findViewById(R.id.movieImage);
                }


                @Override
                public void onClick(View v) {
                    int adapterPosition = getAdapterPosition();
                    String movieId = moviesList.get(adapterPosition).getMovieId();
                    Log.v("MovieAdapter",movieId);
                    mClickHandler.onClick(movieId);
                }
            }
        }

And part of my activity which actually implements the MoviesAdapterOnClickHandler

public class MainActivityFragment extends Fragment
                                    implements LoaderManager.LoaderCallbacks<Object>, MoviesAdapter.MoviesAdapterOnClickHandler {
...
adapter = new MoviesAdapter(getActivity(), moviesArrayList, this);
...
@Override
public void onClick(String position) {
    Toast.makeText(getActivity()," id: " + position, Toast.LENGTH_SHORT).show();
}

Any ideas?

Thanks,

Theo

Upvotes: 0

Views: 241

Answers (2)

Abhishek kumar
Abhishek kumar

Reputation: 4445

You forget to add itemView.setOnClickListener(this); inside your MoviesViewHolder Constructor , your MoviesViewHolder implements onClick so you have to add this.

 public class MoviesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

                ImageView mMovieImage;

                public MoviesViewHolder(View itemView) {
                    super(itemView);
                     itemView.setOnClickListener(this);
                    mMovieImage = itemView.findViewById(R.id.movieImage);
                }

Upvotes: 1

Hendrik Marx
Hendrik Marx

Reputation: 744

Your view holder implements OnClickListener but you are not setting the listener on your view. You need to do something like view.setOnClickListener(this) in the constructor of the ViewHolder

Upvotes: 3

Related Questions