RecyclerView 莫名奇妙自动滚动的问题

发布于 2022-09-03 07:38:53 字数 2757 浏览 14 评论 0

RecyclerView的Adapter里面有8个item。一旦下图中的“王三干杂”在上半部部分的时候,我点击最后四个中的任何一个的时候,图中的“王三干杂”自动滚动到中间去了。

clipboard.png

    class CartGoodsViewHolder extends RecyclerView.ViewHolder {
        @Bind(R.id.iv_goods)
        SimpleDraweeView goodsImg;
        @Bind(R.id.tv_goods_name)
        TextView goodsTitle;
        @Bind(R.id.tv_price)
        TextView goodsPrice;
        @Bind(R.id.et_goods_number)
        AddAndSubView goodsQuantities;
        @Bind(R.id.cb_select_goods)
        CheckBox goodsSelected;
        @Bind(R.id.iv_delete_goods)
        ImageView ivDeleteGoods;
        @Bind(R.id.rl_goods)
        RelativeLayout rlGoods;


        public CartGoodsViewHolder(View itemView) {
            super(itemView);
            try {
                ButterKnife.bind(this,itemView);
            } catch (Exception e) {
                e.printStackTrace();
            }
            goodsSelected.setOnClickListener(v->EventBus.getDefault()
                    .post(new GoodsSelectedEvent(orderModels.get(getAdapterPosition()).getGoodsId()
                            ,orderModels.get(getAdapterPosition()).getShopId()
                            ,goodsSelected.isChecked())));
        }
    }

在Fragment中调用notify方法:

@Override
public void notifyShoppingCartStatus(float totalValue) {
    goodsAdapter.notifyDataSetChanged();
    tvTotal.setText(String.valueOf(totalValue));
}

在presenter中遍历,查找哪些变化了:
    @Subscribe
public void onGoodsSelected(GoodsSelectedEvent event) {
    long totalValue = 0;
    long goodsId = event.getGoodsId();
    long shopId = event.getShopId();
    boolean status = event.isSelected();
    int selectedCount = 0;
    int goodsCountInShop = 0;
    int goodsCountAll = 0;

    for(OrderModel item: orderModels) {

        if(item.getGoodsId() == goodsId) {
            item.setSelected(status);
        }

        if(item.getShopId() == shopId){
            goodsCountInShop++;
            if(item.isSelected()) {
                selectedCount++;
            }
        }

        if(item.isSelected()){
            goodsCountAll++;
            totalValue += item.getTotalValue();
        }
    }

    for(OrderModel item: orderModels) {
        if(item.getShopId() == shopId){
            item.setShopSelected(goodsCountInShop == selectedCount);
        }
    }

    EventBus.getDefault().post(new CheckAllStateChangeEvent(goodsCountAll == orderModels.size()));
    view.notifyShoppingCartStatus(totalValue);

}
补充内容: 把recyclerview 高度设为match_parent就解决了.....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文