RecyclerView 最新添加的item在最上面

 

效果图如下:

核心代码如下:

 findViewById(R.id.add).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                GoodItemInfo goodItemInfo = new GoodItemInfo();
                goodItemInfo.setSkuId(id + "");
                goodItemInfo.setName("商品" + id);
                goodItemInfo.setBuyNum(1);
                id++;

                dataList.add(0, goodItemInfo);
                adapter.notifyItemInserted(0);
                recyclerView.getLayoutManager().scrollToPosition(0);
            }
        });

注意:

notifyItemInserted(int position): 列表position位置添加一条数据时可以调用,伴有动画效果

插入完成的时候,第一个不会自动出现在recycleView的顶部,这个时候你需要自己手动将recycleView滑动到顶部, recycleView.scrollToPosition(0) ;

 

删除一个item的代码:

 private void displayDeleteDialog(final GoodItemInfo itemInfo) {
        CommonDialog dialog = new CommonDialog(this);
        dialog.setMessage("确认移除商品?");
        dialog.setConfirmButton(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = dataList.indexOf(itemInfo);
                dataList.remove(itemInfo);

                if (position >= 0) {
                    adapter.notifyItemRemoved(position);
                }
            }
        }, "确认");
        dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialog) {
                if (itemInfo.getBuyNum() == 0) {
                    itemInfo.setBuyNum(1);
                    int index = dataList.indexOf(itemInfo);
                    adapter.notifyItemChanged(index);
                }
            }
        });
        dialog.show();
    }

删除一条需要notify, 使用adapter.notifyItemRemoved(position);

更新一条需要notify,使用 adapter.notifyItemChanged(index);

加和减的逻辑:

  View.OnClickListener onClickListener = new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    GoodItemInfo itemInfo = (GoodItemInfo) itemView.getTag();
                    int buyNum = itemInfo.getBuyNum();
                    switch (v.getId()) {
                        case R.id.wd_add:
                            buyNum++;
                            itemInfo.setBuyNum(buyNum);
                            break;
                        case R.id.wd_sub:
                            if (buyNum > 0) {
                                buyNum--;
                                itemInfo.setBuyNum(buyNum);
                            } else {
                                displayDeleteDialog(itemInfo);
                            }
                            break;

                    }
                    skuNumTv.setText(String.valueOf(itemInfo.getBuyNum()));
                }
            };

焦点的地方的处理:

 focusChangeListener = new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                EditText editText = (EditText)v;
                String inputStr = editText.getText().toString();
                if(!hasFocus){
                    if(TextUtils.isEmpty(inputStr)){
                        inputStr = "0";
                    }
                    int skuNum = Integer.parseInt(inputStr);
                    GoodItemInfo itemInfo = (GoodItemInfo) editText.getTag();
                    itemInfo.setBuyNum(skuNum);
                    editText.setText(String.valueOf(skuNum));

                }else{
                    editText.setSelection(inputStr.length(),inputStr.length());
                }
            }
        };

代码下载地址https://download.csdn.net/download/jingerlovexiaojie/10375515

 

 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值