效果图如下:
核心代码如下:
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