RecyclerView 最新添加的item在最上面

 

效果图如下:

RecyclerView 最新添加的item在最上面_第1张图片

核心代码如下:

 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

 

 

你可能感兴趣的:(Android)