向下滚动到新帖子时点击无效

问题描述

我想用 json api 和 wordpress 作为后端制作应用程序。我可以获取帖子并且它可以正常工作直到第一页,当我点击每个帖子时,我也可以看到帖子详细信息,但是在下一页的帖子中,点击不起作用并且应用程序崩溃,我得到的错误是:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.punjabidharti.myapplication/com.punjabidharti.myapplication.PostDetails}: java.lang.indexoutofboundsexception: Index: 10,Size: 10

这是适配器...

 private ArrayList<Model> dataset;
private Context mContext;
int total_types;

public RecyclerViewAdapter(ArrayList<Model> mlist,Context context) {
    this.dataset = mlist;
    this.mContext = context;

}
public static class ImageTypeViewHolder extends RecyclerView.ViewHolder {

       TextView title,subtitle;
       ImageView imageView;

       public ImageTypeViewHolder (View itemView) {

           super(itemView);

           this.title = (TextView) itemView.findViewById(R.id.title);
           this.subtitle = (TextView) itemView.findViewById(R.id.subtitle);
           this.imageView = (ImageView) itemView.findViewById(R.id.icon);


       }
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.postdetails,parent,false);
    return new ImageTypeViewHolder(view);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder,final int position) {

    final Model object = dataset.get(position);
    ( (ImageTypeViewHolder) holder).title.setText(object.title);
    ( (ImageTypeViewHolder) holder).subtitle.setText(object.subtitle);


    ( (ImageTypeViewHolder) holder).title.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent (mContext,PostDetails.class);
            intent.putExtra ("itemPosition",position);
            mContext.startActivity(intent);
        }
    });

    ( (ImageTypeViewHolder) holder).subtitle.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent (mContext,position);
            mContext.startActivity(intent);

        }
    });

}



@Override
public int getItemViewType(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

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

这就是我在滚动时加载下一页的方式..

 recyclerView.setonScrollListener(new EndlessRecyclerOnScrollListener(mLayoutManager) {
        @Override
        public void onLoadMore(int current_page) {
            // do something...

            yourURL = "https://punjabidharti.com/wp-json/wp/v2/posts/?categories=4514&per_page=10&page=2";

           
            getRetrofit();
            


        }
    });

这就是我通过改造获取帖子的方式..

 public void getRetrofit(){
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseURL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    RetrofitArrayApi service = retrofit.create(RetrofitArrayApi.class);
    String yourURl = yourURL.replace(baseURL,"");
    Call<List<WPPost>>  call = service.getPostInfo( yourURl);
    call.enqueue(new Callback<List<WPPost>>() {
        @Override
        public void onResponse(Call<List<WPPost>> call,Response<List<WPPost>> response) {
            Log.e("mainactivyt"," response "+ response.body());
            mListPost = response.body();
            progressBar.setVisibility(View.GONE);
            if (response.body() != null) {
                for (int i = 0; i < response.body().size(); i++) {
                    Log.e("main "," title " + response.body().get(i).getTitle().getRendered() + " " +
                            response.body().get(i).getId());
                    String tempdetails = response.body().get(i).getExcerpt().getRendered().toString();
                    tempdetails = tempdetails.replace("<p>","");
                    tempdetails = tempdetails.replace("</p>","");
                    tempdetails = tempdetails.replace("[&hellip;]","");
                    list.add(new Model(Model.IMAGE_TYPE,response.body().get(i).getTitle().getRendered(),tempdetails,response.body().get(i).getLinks().getWpFeaturedmedia().get(0).getHref()));
                }

                progressBar.setVisibility(View.GONE);
            } else {
                progressBar.setVisibility(View.GONE);
            }


            adapter.notifyDataSetChanged();
        }
        @Override
        public void onFailure(Call<List<WPPost>> call,Throwable t) {
        }
    });

解决方法

将 Adapter 和 ArrayList 更改为 List。

public class ImageTypeViewHolder extends RecyclerView.Adapter<ImageTypeViewHolder.ViewHolder> {
    private List<Model> dataset;
    private Context mContext;
    int total_types;
    public ImageTypeViewHolder(List<Model> mlist,Context context) {
        this.dataset = mlist;
        this.mContext = context;

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder,int position) {
        holder.title.setText(dataset.get(position).getTitle());
        holder.subtitle.setText(dataset.get(position).getSubTitle());
        holder.title.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent (mContext,PostDetails.class);
                intent.putExtra ("itemPosition",position);
                mContext.startActivity(intent);
            }
        });
        holder.subtitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent (mContext,position);
                mContext.startActivity(intent);
            }
        });
    }

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

    public  static class ViewHolder extends RecyclerView.ViewHolder{
        TextView title,subtitle;
        ImageView imageView;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            this.title = (TextView) itemView.findViewById(R.id.title);
            this.subtitle = (TextView) itemView.findViewById(R.id.subtitle);
            this.imageView = (ImageView) itemView.findViewById(R.id.icon);
        }
    }
}
,

试试这个

public class ImageTypeViewHolder extends RecyclerView.Adapter<ImageTypeViewHolder.ViewHolder> {
    private List<Model> dataset;
    private Context mContext;
    public ImageTypeViewHolder(List<Model> mlist,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder,int position) {
        holder.setData(dataset.get(position).getTitle(),dataset.get(position).getSubTitle());
    }

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

    class ViewHolder extends RecyclerView.ViewHolder{
        TextView title,subtitle;
        ImageView imageView;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            this.title = (TextView) itemView.findViewById(R.id.title);
            this.subtitle = (TextView) itemView.findViewById(R.id.subtitle);
            this.imageView = (ImageView) itemView.findViewById(R.id.icon);
        }
       private void setData(String title,String subtitle){
           this.title.setText(title);
           this.subtitle.setText(subtitle);
       }
       
       title.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent (mContext,position);
                itemView.getContext().startActivity(intent);
            }
        });

       subtitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent (mContext,position);
                itemView.getContext().startActivity(intent);
            }
        });
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...