关于使用Banner时,轮播图从最后一页开始的解决情况记录

关于使用Banner时,轮播图从最后一页开始的解决情况记录

项目介绍

项目中需要实现轮播图的功能,默认图片无点击效果,线上拿到的轮播图点击不同图片会跳转到不同的url页面,选择使用com.youth.banner.Banner进行实现。

实现流程

进入页面,先往List<Bitmap> banners里面添加默认轮播的图片,然后去进行轮播;
接着在一个新线程里面执行获取网页上或数据库中的轮播图信息,并且将图片以BitMap的格式添加进banners里面,将图片要跳转的url路径也存到对应的list中,然后调用handler发送消息,告诉主线程调用轮播图适配器的方法notifyDataSetChanged()

出现问题

重新打开app时,轮播图都是从最后一张开始播放。

解决办法

线程中获取到图片和信息后,通过handler发送消息去直接调用对应的方法再走一遍Banner的相关适配器设置以及其他的设置。

代码

BannerImageAdapter<Bitmap> bannerImageAdapter;

List<Bitmap> banners = new ArrayList<>();
List<String> bannerstz = new ArrayList<>();

Handler mHandler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(@NonNull Message message) {
        if (message.what == UPDATE_BANNER) {
            initBanner();
        }
        return true;
    }
});
banner = view.findViewById(R.id.banner);
banners.clear();
bannerstz.clear();
banners.add(BitmapFactory.decodeResource(getResources(), R.drawable.banner01));
initBanner();

new Thread(new Runnable() {
    @Override
    public void run() {
        String bannerhttp = activity.getSJZDValue("itsys.mobportal.index_carousel_android");
        if (bannerhttp != null) {
            String[] bhlist = bannerhttp.split(",");
            banners.clear();
            for (String bm : Arrays.asList(bhlist)) {
                String[] bms = bm.split("\\|");
                String bmhttp = bms[0];
                String bmtz = (bms.length > 1 ? bms[1] : "a");
                if (bmhttp != null && !"".equals(bmhttp)) {
                    Bitmap bitmap = getBitmap(bmhttp);
                    if (bitmap != null && !"".equals(bitmap)) {
                        banners.add(bitmap);
                        bannerstz.add(bmtz);
                    }
                }
            }
            // 一定要用handler发送消息更新轮播图,不然会出现闪退.
            // Android Studio直接安装app不报错,但是打成apk包手动安装就会闪退报错。
            mHandler.sendEmptyMessage(0);
        }
    }
}).start();
private void initBanner() {
    bannerImageAdapter = new BannerImageAdapter<Bitmap>(banners) {
        @Override
        public void onBindView(BannerImageHolder holder, Bitmap data, int position, int size) {
            holder.imageView.setImageBitmap(data);
            holder.imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            holder.imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (bannerstz.size() == 0
                            || bannerstz.get(position) == null
                            || "a".equals(bannerstz.get(position))
                            || "".equals(bannerstz.get(position))) {
                        return;
                    }
                    String[] strarray = bannerstz.get(position).split(":");
                    if (strarray.length < 2) return;
                    if (strarray[1].startsWith("//")) {
                        WebActivity.start(activity, bannerstz.get(position), null);
                    } else {
                        String url = BaseActivity.getUrl(activity).replace("/server", strarray[1]);
                        WebActivity.start(activity, url, null);
                    }
                }
            });
        }
    };

    banner.setAdapter(bannerImageAdapter)
            .setPageTransformer(new ZoomOutPageTransformer())
            .addBannerLifecycleObserver(this)
            .setIndicator(new CircleIndicator(activity));
}

问题圆满解决,至于代码中的命名问题,大家请不要在意0_0,另外如果有其他好的思路,欢迎大家指点,如果有不对的地方,也欢迎大家指正,共同进步!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值