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

 缤纷之铃6868 发布于 2022-10-29 07:41

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

    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就解决了.....
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有