Android Viewpager适配器每次都在Recyclerview适配器中创建

Android Viewpager适配器每次都在Recyclerview适配器中创建,android,android-recyclerview,android-viewpager,retrofit,Android,Android Recyclerview,Android Viewpager,Retrofit,我在RecyclerView适配器中有一个ViewPager,可以显示多个图像。RecyclerView适配器代码: @Override public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) { Call<List<ImagesModel>> call = restApiClass.getPostImages(list.get

我在RecyclerView适配器中有一个ViewPager,可以显示多个图像。RecyclerView适配器代码:

 @Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {

   Call<List<ImagesModel>> call = restApiClass.getPostImages(list.get(position).getId());
    call.enqueue(new Callback<List<ImagesModel>>() {
        @Override
        public void onResponse(Call<List<ImagesModel>> call, Response<List<ImagesModel>> response) {

            if (response.isSuccessful() && response.body() != null) {

                imagesList = response.body();

                viewPagerAdapter = new ViewPagerAdapter (imagesList, context);
                Log.i("adapterPosts", "A NEW ADAPTER IS CREATED");

                holder.postsViewPager.setAdapter(viewPagerAdapter );
                holder.postsCircleIndicator.setViewPager(holder.postsViewPager);

            }
        }
}

但这一次只加载了第一个ViewPager。那么,我必须做些什么来避免每次都创建适配器呢?

看,似乎您试图对每个项目使用相同的适配器作为全局字段,尝试使适配器成为每个视图持有者类的成员字段,如下所示:

public static class YourViewHolder extends RecyclerView.ViewHolder {
    ............
    private ViewPagerAdapter adapter;
    ..........

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

        ................



    }
在onBindViewHolder中:

  @Override
  public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {

          .....................

        if (response.isSuccessful() && response.body() != null) {

            ...........

            imagesList = response.body();

            //create the adapter per viewholder if not exists
            if(holder.adapter==null){

            //create adapter
            holder.adapter = new ViewPagerAdapter (imagesList, context);

            //set adapter
            holder.postsViewPager.setAdapter(holder.adapter);

             }



            .........

        }
    }
  }

看,您似乎试图对每个项目使用相同的适配器作为全局字段,尝试使适配器成为每个视图持有者类的成员字段,如下所示:

public static class YourViewHolder extends RecyclerView.ViewHolder {
    ............
    private ViewPagerAdapter adapter;
    ..........

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

        ................



    }
在onBindViewHolder中:

  @Override
  public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {

          .....................

        if (response.isSuccessful() && response.body() != null) {

            ...........

            imagesList = response.body();

            //create the adapter per viewholder if not exists
            if(holder.adapter==null){

            //create adapter
            holder.adapter = new ViewPagerAdapter (imagesList, context);

            //set adapter
            holder.postsViewPager.setAdapter(holder.adapter);

             }



            .........

        }
    }
  }

谢谢你的回答。我尝试过这个方法,但当我向下和向上滚动时,它仍然会多次创建适配器。它会为每个项目创建适配器。是的,但我只想为每个项目创建一次适配器。但这可能会为一个项目创建多次适配器。谢谢您的回答。我尝试过这个方法,但当我向下和向上滚动时,它仍然会多次创建适配器。它会为每个项目创建适配器。是的,但我只想为每个项目创建一次适配器。但这可能会为一个项目多次创建适配器。