Java 与setOnItemClickListener的问题;“回收视图”;

Java 与setOnItemClickListener的问题;“回收视图”;,java,android,android-recyclerview,Java,Android,Android Recyclerview,我在使用电影数据库的PopularMovies项目中工作 我成功地从API中获取了数据,但当我在RecyclerView中单击该项时,它不起作用。 我已经跟随了udacity的教程 大众问题 这是适配器 我该怎么办 package com.popmov.popmov.popmov import android.content.Context import android.support.v7.widget.RecyclerView import android.view.LayoutInfl

我在使用电影数据库的PopularMovies项目中工作 我成功地从API中获取了数据,但当我在RecyclerView中单击该项时,它不起作用。 我已经跟随了udacity的教程

大众问题

这是适配器

我该怎么办

package com.popmov.popmov.popmov

import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView


import com.popmov.popmov.popmov.data.Movie;
import com.squareup.picasso.Picasso;


class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MoviesViewHolder> {
    private final Context context;
    private Movie[] moviesData;
    public static final String BASE_URL_IMAGE = "http://image.tmdb.org/t/p/w342";

    private final MoviesAdapterOnClickHandler moviesAdapterOnClickHandler;

    public interface MoviesAdapterOnClickHandler {
        void onItemClickListener(int id, String title, String imageUrl, String synopsis, double rating, String releaseDate);
    }

    public MoviesAdapter(MoviesAdapterOnClickHandler clickHandler,Context context) {
        moviesAdapterOnClickHandler = clickHandler;
        this.context=context;
    }

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

        public final ImageView imageView;

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

        @Override
        public void onClick(View v) {
            int adapterPosition = getAdapterPosition();

            int id = moviesData[adapterPosition].getId();
            String title = moviesData[adapterPosition].getTitle();
            String imageUrl = moviesData[adapterPosition].getImageUrl();
            String synopsis = moviesData[adapterPosition].getSynopsis();
            double rating = moviesData[adapterPosition].getRating();
            String releaseDate = moviesData[adapterPosition].getReleaseDate();

            moviesAdapterOnClickHandler.onItemClickListener(id, title, imageUrl, synopsis, rating, releaseDate);
        }
    }

    @Override
    public MoviesViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        Context context = viewGroup.getContext();
        int layoutForItem = R.layout.movies_list_item;
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(layoutForItem, viewGroup, false);
        return new MoviesViewHolder(view);
    }

    @Override
    public void onBindViewHolder(MoviesViewHolder holder, int position) {
        String path = BASE_URL_IMAGE + moviesData[position].getImageUrl();
        Picasso.get()
                .load(path)
                .placeholder(R.mipmap.poster)
                .into(holder.imageView);
    }

    @Override
    public int getItemCount() {
        if (null == moviesData) {
            return 0;
        } else {
            return moviesData.length;
        }
    }


}
包com.popmov.popmov.popmov
导入android.content.Context
导入android.support.v7.widget.RecyclerView
导入android.view.LayoutInflater
导入android.view.view
导入android.view.ViewGroup
导入android.widget.ImageView
导入com.popmov.popmov.popmov.data.Movie;
导入com.squareup.picasso.picasso;
类MoviesAdapter扩展了RecyclerView.Adapter{
私人最终语境;
私人电影[]电影数据;
公共静态最终字符串BASE\u URL\u IMAGE=”http://image.tmdb.org/t/p/w342";
私人最终电影改编者ClickHandler电影改编者ClickHandler;
公共界面MoviesAdapterOnClickHandler{
void-onItemClickListener(int-id、字符串标题、字符串图像URL、字符串摘要、双重评级、字符串发布日期);
}
公共MoviesAdapter(MoviesAdapterOnClickHandler clickHandler,上下文){
moviesAdapterOnClickHandler=clickHandler;
this.context=context;
}
公共类MoviesViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
公共最终图像视图;
公共电影视图持有者(视图项视图){
超级(项目视图);
imageView=itemView.findViewById(R.id.image\u view\u movie);
setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
int adapterPosition=getAdapterPosition();
int id=moviesData[adapterPosition].getId();
字符串title=moviesData[adapterPosition].getTitle();
字符串imageUrl=moviesData[adapterPosition].getImageUrl();
字符串synopsis=moviesData[adapterPosition].getSynopsis();
双重评级=moviesData[adapterPosition].getRating();
字符串releaseDate=moviesData[adapterPosition].getReleaseDate();
moviesAdapterOnClickHandler.onItemClickListener(id、标题、图像URL、概要、评级、发布日期);
}
}
@凌驾
公共电影ViewHolder onCreateViewHolder(ViewGroup ViewGroup,int viewType){
Context=viewGroup.getContext();
int layoutForItem=R.layout.movies\u list\u项目;
LayoutFlater充气机=LayoutFlater.from(上下文);
视图=充气机。充气(项目布局,视图组,false);
返回新的MoviesViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(MoviesViewHolder,内部位置){
字符串路径=BASE_URL_IMAGE+moviesData[position].getImageUrl();
毕加索
.加载(路径)
.占位符(R.mipmap.poster)
.插入(支架.图像视图);
}
@凌驾
public int getItemCount(){
if(null==moviesData){
返回0;
}否则{
返回moviesData.length;
}
}
}

在您的
movies\u列表\u item.xml中
make
ImageView
单击可设置为false

android:clickable="false"

由于您的
ImageView
clickable属性设置为
true
,因此您的
ImageView
正在吸收
ClickListener

检查是否首先调用了
onClick
方法,放置断点或日志语句。我不明白您说的
onClick
不起作用,因此,您可以做的第一件事是检查是否调用了
onClick
,如果调用了它,则会缩小问题的范围。您可以通过设置断点并在调试模式下运行应用程序来检查是否调用了它。或者在
onClick
方法中放入
Log
语句,类似于
Log.d(“RecyclerView”,“调用我的onClick”)
,运行应用程序,单击,然后在调试部分的LogCat中检查是否看到消息,如果消息在那里,这意味着调用了
onClick
,它与内部代码有关。您的
itemView
只包含
ImageView
?是的,它只包含ImageView@AbuYousuf