今天做购物车,特别奇怪notifyDataSetChanged无论如何不能刷新数据。
代码如下:
marketCartTvEditShop.setOnClickListener(v -> {//刷新数据的标识,知否可以编辑购物车isEditCart = !isEditCart;//编辑购物车mCardAdapter.notifyDataSetChanged();Toast.makeText(getActivity(), "点击了编辑", Toast.LENGTH_SHORT).show();if (isEditCart) {marketCartTvEditShop.setText("编辑");} else {marketCartTvEditShop.setText("完成");}});
再看下adapter
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);marketCartRvData.setLayoutManager(layoutManager);//设置分隔线marketCartRvData.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayout.VERTICAL));marketCartRvData.setItemAnimator(new DefaultItemAnimator());mCardAdapter = new CardAdapter(cartShowData,isEditCart);marketCartRvData.setAdapter(mCardAdapter);initListener();
这么看都觉得没有问题
可是notifyDataSetChanged无论如何都不刷新数据,怎么回事呢?
最后百度下才知道原来在notifyDataSetChanged方法中如果传入adapter中的数据没有改变的话notifyDataSetChanged是不会起作用的,也就是说传入adapter里面的数据只有改变notifyDataSetChanged才可以刷新成功。那我们怎么办呢?
很简单在数控居中设置一个标识,例如我设置一个Boolean如下:
/*** 是否可以编辑购物车的标识*/private boolean editCart;public boolean isEditCart() {return editCart;}public void setEditCart(boolean editCart) {this.editCart = editCart;}
还是看下图吧,代码看的不是很明显。
也就是说我要编辑购物车,我就讲editCart设置为true
也就是下面的代码
marketCartTvEditShop.setOnClickListener(v -> {isEditCart = !isEditCart;cartShowData.setEditCart(isEditCart);//编辑购物车mCardAdapter.notifyDataSetChanged();Toast.makeText(getActivity(), "点击了编辑", Toast.LENGTH_SHORT).show();if (isEditCart) {marketCartTvEditShop.setText("编辑");} else {marketCartTvEditShop.setText("完成");}});
还是看图吧,更清晰
这样的话传入adapter里面的数据就改变了,notifyDataSetChanged也就可以起作用刷新数据了
来看下成功后的动图: