1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android开发之RecyclerView之刷新数据notifyDataSetChanged失败的问题

Android开发之RecyclerView之刷新数据notifyDataSetChanged失败的问题

时间:2018-09-14 09:59:18

相关推荐

Android开发之RecyclerView之刷新数据notifyDataSetChanged失败的问题

今天做购物车,特别奇怪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也就可以起作用刷新数据了

来看下成功后的动图:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。