安卓项目总结

9 篇文章 0 订阅
5 篇文章 0 订阅

1 . recycleview 限定item数量

       我们有时候会遇到这类需求,要求某个列表,当列表里面当数量超过10条后,就显示前10条数据。如果不到10条就显示全部数据。对于一个recycleview,我们可以对传入adapter的数据源进行设置。在Java里面,对于集合list,我们可以通过list.subList(X1 , X2 )来设置list的长度。

 newlist = knowledgeInfoList.subList(0, 10);

        设置后,将新的list传入给adapter。

private void initAdapter() {
    if (weeksettlementAdapter == null) {
        /**
         * item超过10条以后显示省略号
         */
        if (settleBean != null && settleBean.getKnowledgeInfoList() != null
                && settleBean.getKnowledgeInfoList().size() > 10) {
            ellipsis.setVisibility(View.VISIBLE);
            /**
             * 截取前10条信息传入
             */
            List<KnowledgeInfoListBean> newlist = knowledgeInfoList.subList(0, 10);
            weeksettlementAdapter = new WeeksettlementAdapter(newlist);

        } else {  // item10条以内
            ellipsis.setVisibility(View.GONE);
            weeksettlementAdapter = new WeeksettlementAdapter(knowledgeInfoList);

        }
        LinearLayoutManager manager = new LinearLayoutManager(this);
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        RecyclerView.setLayoutManager(manager);
        RecyclerView.setNestedScrollingEnabled(false);
        RecyclerView.setAdapter(weeksettlementAdapter);
    }
}

 

2.单页面接收多页面传参

         在实际开发中,单一页面,会从其他页面接受参数,但是这个参数可能来自不同页面,来自不同页面后,逻辑是不一样的。

这个时候我们可以在传参中增加一个boolean值/int值,用于区分。

public void initBundle() {
    week = getIntent().getBooleanExtra("fromweek", true);
    if (week) { // week为true 说明是从周报接受的数据
        outbtnlayaout.setVisibility(View.GONE);
        settleBean = (RowsBean) getIntent().getSerializableExtra("weekbean");
        showShareView();
    } else {  // 首页过来的
        homeBundle();
        outbtnlayaout.setVisibility(View.VISIBLE);
        RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) nestScrollview.getLayoutParams();
        lp.bottomMargin = DensityUtil.dp2px(56);
        nestScrollview.setLayoutParams(lp);
    }
}

 

3.对于请求数据和刷新数据,要在一个线程中执行

         对于数据请求和刷新数据,最好在一个线程中执行,最好都在子线程中去执行。

holder.mRelativeGroupMain.setOnClickListener(v -> {
    onGroupClickListener.onClick(groupIndex);
    if (groupBean.errQuestionInfoList != null) {
        if (groupList.get(groupIndex).show) {
            if (isExpanded(groupIndex)) {
                collapseGroup(groupIndex);  // 关闭方法
            } else {
                expandGroup(groupIndex);   // 展开方法
                scrollItemBottomListener.scrollView(groupIndex);}
        } else {
            collapseGroup(groupIndex);  // 关闭方法
        }
    } else {
        netRequest(groupIndex);
        notifyGroupChanged(groupIndex);
    }
});

        请求接口数据

private void netRequest(int index, ImageView imageView, RelativeLayout relativeLayout) {
        LoadingDialogUtils.getInstance().showLoadingDialog(mContext);
        String knowledgelist = groupList.get(index).errKnowledgeInfo.knowledgeId;  // 要求传入点击位置的knowledgeid
        new ErrorListRequest(knowledgelist).enqueue(new NetCallback<List<ErrQuestionInfoListBean>>() {

            @Override
            public void onSuccess(List<ErrQuestionInfoListBean> errQuestionInfoListBeans) {
                LoadingDialogUtils.getInstance().dismissDialog();    groupList.get(index).setErrQuestionInfoList(errQuestionInfoListBeans);
                groupList.get(index).setShow(true);
                expandGroup(index, imageView, relativeLayout);
            }

            @Override
            public void onError(ClHttpException e, String s) {
                LoadingDialogUtils.getInstance().dismissDialog();
            }
        });
    }

        在上面第一段代码中,在执行netRequest(groupIndex)后,会走子线程,执行第二段代码;但是主线程中依旧会执行notifyGroupChanged(groupIndex),这会导致点击时,请求的数据还未返回,但是已经执行到刷新数据,因此点击第一次时候刷新的数据为空,第二次点击时候,子线程请求的数据已经收到了,刷新数据,进而有了数据。

正确方案:直接在请求数据中,更新数据,都在子线程中执行操作。

private void netRequest(int index, ImageView imageView, RelativeLayout relativeLayout) {
        LoadingDialogUtils.getInstance().showLoadingDialog(mContext);
        String knowledgelist = groupList.get(index).errKnowledgeInfo.knowledgeId;  // 要求传入点击位置的knowledgeid
        new ErrorListRequest(knowledgelist).enqueue(new NetCallback<List<ErrQuestionInfoListBean>>() {

            @Override
            public void onSuccess(List<ErrQuestionInfoListBean> errQuestionInfoListBeans) {
                LoadingDialogUtils.getInstance().dismissDialog();
                groupList.get(index).setErrQuestionInfoList(errQuestionInfoListBeans);
                groupList.get(index).setShow(true);
                expandGroup(index, imageView, relativeLayout);
                notifyGroupChanged(index);  // 刷新group数据,包括group里面的child数据
            }

            @Override
            public void onError(ClHttpException e, String s) {
                LoadingDialogUtils.getInstance().dismissDialog();
            }
        });
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值