Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onClickItem在RecyclerView上不起作用_Android_Android Recyclerview_Onclicklistener - Fatal编程技术网

Android onClickItem在RecyclerView上不起作用

Android onClickItem在RecyclerView上不起作用,android,android-recyclerview,onclicklistener,Android,Android Recyclerview,Onclicklistener,我正在尝试在Android上实现onClicklistener。单击时,我需要从GridLayoutManager获取一个特定项目的详细信息。onClick可以工作,但它列出了数组列表中的所有项。 适配器类: public class MoviesGridAdapter extends RecyclerView.Adapter<MoviesGridAdapter.PosterViewHolder> { private Context context; pri

我正在尝试在Android上实现
onClick
listener。单击时,我需要从
GridLayoutManager
获取一个特定项目的详细信息。
onClick
可以工作,但它列出了数组列表中的所有项。 适配器类:

    public class MoviesGridAdapter extends RecyclerView.Adapter<MoviesGridAdapter.PosterViewHolder> {

    private Context context;
    private List<Movies> movieItems = new ArrayList<>();

    public MoviesGridAdapter(Context context, List<Movies> movieItems) {
        this.context = context;
        this.movieItems = movieItems;
    }

    @Override
    public PosterViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.movies_poster_grid_view_item, parent, false);
        return new PosterViewHolder(view);
    }

    @Override
    public void onBindViewHolder(PosterViewHolder holder, int position) {
        final Movies movies = movieItems.get(position);
        String posterUrlPath = movies.getPosterPath();

        Picasso.with(context)
                .load(Constants.MOVIE_POSTER_URL + posterUrlPath).into(holder.poster);

        holder.mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(context, MovieDetailsActivity.class);
                intent.putExtra("Title", movies.getTitle());
                intent.putExtra("Overview", movies.getOverview());
                context.startActivity(intent);
            }
        });
    }

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

    public class PosterViewHolder extends RecyclerView.ViewHolder {

        ImageView poster;
        final View mView;

        public PosterViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
            poster = (ImageView) itemView.findViewById(R.id.movies_poster_mv);
        }

    }
    public void setMovies(List<Movies> movies) {
        movieItems.clear();
        movieItems = movies;
        notifyDataSetChanged();
    }

}
公共类MoviesGridAdapter扩展了RecyclerView.Adapter{
私人语境;
private List movieItems=new ArrayList();
公共MoviesGridAdapter(上下文上下文,列出movieItems){
this.context=上下文;
this.movieItems=movieItems;
}
@凌驾
public PosterViewHolder onCreateViewHolder(视图组父级,int-viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.movies\u poster\u grid\u View\u item,parent,false);
返回新的PosterViewHolder(视图);
}
@凌驾
BindViewHolder上的公共无效(PosterViewHolder,内部位置){
最终电影=电影项目。获取(位置);
字符串posterUrlPath=movies.getPosterPath();
毕加索。与(上下文)
.load(Constants.MOVIE\u POSTER\u URL+posterUrlPath).into(holder.POSTER);
holder.mView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(上下文、MovieDetailsActivity.class);
intent.putExtra(“Title”,movies.getTitle());
intent.putExtra(“概述”,movies.getOverview());
背景。开始触觉(意图);
}
});
}
@凌驾
public int getItemCount(){
返回movieItems.size();
}
公共类PosterViewHolder扩展了RecyclerView.ViewHolder{
ImageView海报;
最终视图mView;
公共PosterViewHolder(视图项视图){
超级(项目视图);
mView=项目视图;
poster=(ImageView)itemView.findViewById(R.id.movies\u poster\u mv);
}
}
公共电影(列出电影){
movieItems.clear();
电影项目=电影;
notifyDataSetChanged();
}
}
我也在
ViewHolder
类上尝试了这一点,该类使用API中声明的
getAdapterPosition()
扩展了
RecyclerView.ViewHolder
。我得到了另一个活动/片段的意图,但我没有得到点击项目的位置,而是加载了整个列表。这是我的建议
ListView
具有
OnItemClickListner
ArrayAdapter
RecyclerView
缺少该功能


提前感谢您的帮助。

您的方法是错误的,请尝试类似的方法

public class YourClassAdapter extends RecyclerView.Adapter<YourClassAdapter.YourClassViewHolder>
    implements View.OnClickListener {

private ArrayList<Object> objects;
private View.OnClickListener listener;

public YourClassAdapter(ArrayList<Object> objects) {
    this.objects = objects;
}

@Override
public YourClassViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.your_layout, parent, false);

    itemView.setOnClickListener(this);

    return new YourClassViewHolder(itemView);
}

@Override
public void onBindViewHolder(YourClassViewHolder holder, int position) {
    Object object = objects.get(position);
    holder.bindObject(object);
}

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

public void setOnClickListener(View.OnClickListener listener) {
    this.listener = listener;
}

@Override
public void onClick(View view) {
    if(listener != null)
        listener.onClick(view);
}

public static class YourClassViewHolder extends RecyclerView.ViewHolder {

    public YourClassViewHolder(View itemView) {
        super(itemView);
    }

    public void bindObject(Object object) {

    }
}

你的方法是错误的尝试这样的方法

public class YourClassAdapter extends RecyclerView.Adapter<YourClassAdapter.YourClassViewHolder>
    implements View.OnClickListener {

private ArrayList<Object> objects;
private View.OnClickListener listener;

public YourClassAdapter(ArrayList<Object> objects) {
    this.objects = objects;
}

@Override
public YourClassViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.your_layout, parent, false);

    itemView.setOnClickListener(this);

    return new YourClassViewHolder(itemView);
}

@Override
public void onBindViewHolder(YourClassViewHolder holder, int position) {
    Object object = objects.get(position);
    holder.bindObject(object);
}

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

public void setOnClickListener(View.OnClickListener listener) {
    this.listener = listener;
}

@Override
public void onClick(View view) {
    if(listener != null)
        listener.onClick(view);
}

public static class YourClassViewHolder extends RecyclerView.ViewHolder {

    public YourClassViewHolder(View itemView) {
        super(itemView);
    }

    public void bindObject(Object object) {

    }
}

像我在下面的示例中所做的那样,将您的点击监听器置于您的内部

这是我的项目中的适配器,我的单击对我来说很好

  /**
     * Created by Rakshit on 7/20/2016.
     */
    public class MyWishListAdapter extends RecyclerView.Adapter<MyWishListAdapter.DataViewHolder> {

        private List<UserWishlist> mList;
        Activity mContext;
        MyWishListFragment fragment;

        public MyWishListAdapter(Activity mContext, MyWishListFragment fragment) {
            mList = new ArrayList<>();
            this.mContext = mContext;
            this.fragment = fragment;
        }


        @Override
        public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_wishlist_table_row_item, parent, false);
            Constants.setAppFont((ViewGroup) v, parent.getContext());
            DataViewHolder dataView = new DataViewHolder(v);
            return dataView;
        }

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


        }

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

        public class DataViewHolder extends RecyclerView.ViewHolder implements APIServerResponse {



            public DataViewHolder(View v) {
                super(v);


                v.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                      //View click listener here  
                    }
                });     
    }
}
/**
*由Rakshit于2016年7月20日创建。
*/
公共类MyWishListAdapter扩展了RecyclerView.Adapter{
私人名单;
活动mContext;
粘虫碎片;
公共MyWishListAdapter(活动mContext,MyWishListFragment){
mList=新的ArrayList();
this.mContext=mContext;
this.fragment=片段;
}
@凌驾
public DataViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.my\u wishlist\u table\u row\u item,parent,false);
Constants.setAppFont((ViewGroup)v,parent.getContext());
DataViewHolder dataView=新的DataViewHolder(v);
返回数据视图;
}
@凌驾
公共无效onBindViewHolder(最终数据视图持有人,内部位置){
}
@凌驾
public int getItemCount(){
返回mList.size();
}
公共类DataViewHolder扩展了RecyclerView。ViewHolder实现了APIServerResponse{
公共数据视图持有者(视图v){
超级(五);
v、 setOnClickListener(新视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
//查看单击此处的侦听器
}
});     
}
}

像我在下面的示例中所做的那样,将您的点击监听器放入您的PosterViewHolder

这是我的项目中的适配器,我的单击对我来说很好

  /**
     * Created by Rakshit on 7/20/2016.
     */
    public class MyWishListAdapter extends RecyclerView.Adapter<MyWishListAdapter.DataViewHolder> {

        private List<UserWishlist> mList;
        Activity mContext;
        MyWishListFragment fragment;

        public MyWishListAdapter(Activity mContext, MyWishListFragment fragment) {
            mList = new ArrayList<>();
            this.mContext = mContext;
            this.fragment = fragment;
        }


        @Override
        public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_wishlist_table_row_item, parent, false);
            Constants.setAppFont((ViewGroup) v, parent.getContext());
            DataViewHolder dataView = new DataViewHolder(v);
            return dataView;
        }

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


        }

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

        public class DataViewHolder extends RecyclerView.ViewHolder implements APIServerResponse {



            public DataViewHolder(View v) {
                super(v);


                v.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                      //View click listener here  
                    }
                });     
    }
}
/**
*由Rakshit于2016年7月20日创建。
*/
公共类MyWishListAdapter扩展了RecyclerView.Adapter{
私人名单;
活动mContext;
粘虫碎片;
公共MyWishListAdapter(活动mContext,MyWishListFragment){
mList=新的ArrayList();
this.mContext=mContext;
this.fragment=片段;
}
@凌驾
public DataViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.my\u wishlist\u table\u row\u item,parent,false);
Constants.setAppFont((ViewGroup)v,parent.getContext());
DataViewHolder dataView=新的DataViewHolder(v);
返回数据视图;
}
@凌驾
公共无效onBindViewHolder(最终数据视图持有人,内部位置){
}
@凌驾
public int getItemCount(){
返回mList.size();
}
公共类DataViewHolder扩展了RecyclerView。ViewHolder实现了APIServerResponse{
公共数据视图持有者(视图v){
超级(五);
v、 setOnClickListener(新视图。OnClickListener(){
@凌驾
公共空间点击(Vi)