我有一个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适配器:
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
//...defination codes...//
progressBar .setVisibility(View.VISIBLE);
Glide.with(context).load(ApiClient.Base_URL + list.get(position).getImage())
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.dontAnimate()
.dontTransform()
.fitCenter()
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
progressBar .setVisibility(View.GONE);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
progressBar .setVisibility(View.GONE);
return false;
}
})
.into(photoView);
container.addView(view);
return view;
}
问题:当我上下滚动回收站视图时,ViewPager适配器会被一遍又一遍地创建,即使它是以前创建的(我在日志中看到它)。我知道每次都调用onBindViewHolder(),所以我尝试了这个:
if(viewPagerAdapter ==null){
viewPagerAdapter = new ViewPagerAdapter(imagesList, context);
holder.postsViewPager.setAdapter(viewPagerAdapter);
holder.postsCircleIndicator.setViewPager(holder.postsViewPager);
} else {
viewPagerAdapter.notifyDataSetChanced();
}
但这一次只加载了第一个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);
}
.........
}
}
}
适配器目录和文件结构 适配器目录和文件结构布局的例子: /application/libraries/Driver_name Driver_name.php drivers Driver_name_subclass_1.php Driver_name_subclass_2.php Driver_name_subclass_3.php 注意: 为了在大小写敏感的文件系统上维持兼容性,这个 Drive
我已经用ImageView和TextView制作了抽屉菜单,它可以run.However,当我想用两个ImageView和一个TextView创建抽屉菜单时,它会用我的第二个ImageView显示错误(“尝试调用虚拟方法”)(我代码中的变量名称是“img”) 我的代码如下: 这是我的日志: 09-16 22:25:38.458:E/AndroidRuntime(14966):致命例外:主 09-1
MainActivity(扩展了fragmentActivity)有listview,它调用listviewadapter,其中有一个带有ViewpagerAdapter的ViewPager。现在,如果我需要在ViewPager中生成5个片段,如何将getFragmentManager()传递给适配器。 MainActivity[fragmentActivity]---->Listview----
问题内容: 我正在使用 PhoneGap 开发移动应用程序,并且必须 从另一个项目 访问某些 服务 。我正在使用 jquery-2.0.0.js 和 jquery-mobile-1.3.2.js 。 这个ajax调用每次都会失败。在 config.xml中, 我有以下几行: 我可能在哪里错了! 问题答案: 问题在于您的phonegap应用程序正在从非网络服务器请求本地文件。本地文件交付时没有HTT
问题内容: 我有一个CI管道来构建我的android应用程序,并使用gitlab管道运行有条件的测试。我的gitlabRunner是一台ubuntu 16.04机器,在docker容器中运行每个构建。我有一个通过USB连接到gitlab运行程序的物理android设备。 最近,每次触发新的构建时,系统都会提示我允许android目标上的USB设备使用RSA指纹。问题在于指纹随着每个构建而变化。 我
问题内容: 我有一些碎片。每个片段具有在(=挥动之前不可见的)用。 适配器设置为,这会减慢刷卡速度,因为每次创建时都要载入30个列表项,因为正在创建新的片段。 我的问题是,在空闲时刷卡后是否可以设置适配器?或者,还有更好的方法?扩展SlideDrawer时,该列表需要已经加载。 问题答案: 我的问题是,是否可以在Pager闲置时刷卡后设置适配器? 还有就是,你可以在设置监控的滑动手势。然后,您可以