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
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerViewitem添加Fragment是可行的,但是需要注意一些问题。 首先,你需要在RecyclerView的Adapter中创建一个布局,该布局包含一个Fragment容器。然后,在Adapter的onBindViewHolder()方法中,使用FragmentTransaction将Fragment添加到布局中。 以下是一个示例: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private Context mContext; private List<Fragment> mFragments; public MyAdapter(Context context, List<Fragment> fragments) { mContext = context; mFragments = fragments; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_layout, parent, false); return new ViewHolder(itemView); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { FragmentTransaction transaction = ((AppCompatActivity) mContext).getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_container, mFragments.get(position)); transaction.addToBackStack(null); transaction.commit(); } @Override public int getItemCount() { return mFragments.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { FrameLayout fragmentContainer; public ViewHolder(@NonNull View itemView) { super(itemView); fragmentContainer = itemView.findViewById(R.id.fragment_container); } } } ``` 在上面的示例中,我们创建了一个包含Fragment容器的item布局(R.layout.item_layout),并在onBindViewHolder()方法中使用FragmentTransaction将Fragment添加到容器中。 请注意,在这个示例中,我们使用了getSupportFragmentManager()方法来获取Fragment管理器。如果你使用的是androidx库,请改用getParentFragmentManager()方法。 此外,当你向RecyclerView添加Fragment时,需要注意Fragment的生命周期。如果你的Fragment是动态添加的,请确保在Activity或Fragment中正确处理Fragment的生命周期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值