Reputation: 3149
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
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
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