Android Viewpager适配器每次都在Recyclerview适配器中创建
我在RecyclerView适配器中有一个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
@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);
}
.........
}
}
}
谢谢你的回答。我尝试过这个方法,但当我向下和向上滚动时,它仍然会多次创建适配器。它会为每个项目创建适配器。是的,但我只想为每个项目创建一次适配器。但这可能会为一个项目创建多次适配器。谢谢您的回答。我尝试过这个方法,但当我向下和向上滚动时,它仍然会多次创建适配器。它会为每个项目创建适配器。是的,但我只想为每个项目创建一次适配器。但这可能会为一个项目多次创建适配器。