部分开发日志 | 青训营笔记

76 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第2天

前言:

这次笔记主要记录最近在优化青训营APP时所发现的一些问题和总结经验

加载更多

这个功能我写过很多次,大部分时候都是通过为RecyclerView添加滚动监听(addOnScollListener)来实现的,可以说是屡试不爽,但是在这次的开发中遇到了一些问题,当我重写onScolled方法并通过判断posiston是否为适配器中Item的最后一个时出现了一个问题:滑动到底部时,方法体中的代码在短时间内被多次调用,导致对API接口的请求也在短时间内进行了多次,不仅使RecyclerView中的内容重复,还触发了API接口的保护机制,使得无法进行下一次的请求,在经过短暂的思考后,我选择了一个比较好理解有简单的方法来解决,那就是定义一个全局变量stopRequest,在请求时会判断stopRequest是否为true,为true时不加载,为false时开始加载,并将其设置为true,只有在adapter刷新完成后才会将stopRequest重新置为false,允许下一次的加载

开发时的部分代码如下:

adp.notifyItemChanged(adp.getItemCount());
//加载完毕,允许再次请求
stopRequest = false;
···
//添加滑动监听,实现加载更多
binding.rvVideoList.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        if (dy < 0)return;
        if (lm.findLastVisibleItemPosition()==adp.getItemCount()-1) {
            if(video_list.size() > 30 || stopRequest){
                binding.tvVideoFoot.setVisibility(View.VISIBLE);
                isHasMore = false;
            }else {
                if (viewModel.getVideoList(userToken,openId)){
                    isHasMore = true;
                    stopRequest = true;
                }else {
                    binding.tvVideoFoot.setVisibility(View.VISIBLE);
                    isHasMore = false;
                }
            }

        }
    }
});

设置状态栏字体颜色

由于在开发的时候为了美观,把状态栏的颜色设置成了白色,导致状态栏的文字信息看不见(状态栏的字体默认白色),所以这里顺便记录一下设置状态栏字体颜色的方法,虽然这个方法仅适用于安卓6.0以上的版本

代码如下:

//设置状态栏字体颜色为黑色
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}

由于是在代码中控制全局的UI,所以我为了方便把代码放进了BaseActivity中并由其它Activity继承,既方便又省心!

心得:

在开发过这么多个APP后依然会发现不少的问题,不过有经验以后之后再遇到就可以轻松解决了,所以这次的心得是写一下开发日志,毕竟这东西平时没怎么去写,也没这个习惯,有时候遇到一些问题时发现自己遇到过,但是忘记怎么解决了就很尴尬,所以在结营前我还是一天一篇开发日志吧,补补之前所遇到过的问题