【问题标题】:Cancel adapter.notifyDataSetChanged取消 adapter.notifyDataSetChanged
【发布时间】:2018-05-07 17:51:15
【问题描述】:

我对 android 有点陌生,我想知道是否有可能在我运行 notifyDataSetChanged() 之后,我可以在中间取消它。

例如我的情况:

如果 onResponse 得到 1 作为响应,我会 getPrice() 然后 getTransaction。

我会用当前代码设置一个 swipeRefreshListener :

swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                            @Override
                            public void onRefresh() {
                                getTransactions(view);

                                Animation fadeIn = new AlphaAnimation(0, 1);
                                fadeIn.setInterpolator(new AccelerateInterpolator()); //and this
                                fadeIn.setDuration(1000);

                                swipeRefreshLayout.setRefreshing(true);

                                layoutBalance.setAnimation(fadeIn);
                                mActivities_RecyclerView.setAnimation(fadeIn);
                                swipeRefreshLayout.setRefreshing(false);

mActivities_RecyclerViewAdapter.notifyDataSetChanged();
                            }

                        });

我会记得 getTransaction,因为我需要从 API 获取最新的数据。 但是因为我使用改造入队的 API 调用将异步运行,所以在我从服务器获取实际数据之前,我的数据会先刷新。

所以,我的问题是我可以取消notifyDataSetChanged() 还是需要更改我的实现?

【问题讨论】:

  • 添加一个条件来检查你现有数据模型的内容是否与新模型相等,如果相等则不需要做notifyDataSetChanged
  • @Venky 调用 api 的东西是排队的,所以即使我设置了布尔值。它会先运行。

标签: java android android-recyclerview retrofit


【解决方案1】:

假设您有一个名为 "APIData" 的数据模型,现在您已经将它分配给适配器和回收视图,在 Swipereferesh 发生并且您收到刷新的数据之后,这将再次位于名为 @987654322 的数据模型中@,现在假设这是APIData2,现在只需使用

APIData.equals(APIData2)

这将检查以前的数据是否与新数据相同,如果是真的你不需要做notifyDataSetChanged()

【讨论】:

  • 对不起,我的错是我需要处理的淡入淡出的事情。我只是碰巧现在调试它。
  • 还有一个小建议,就是在 notifyDataSetChanged 之后使用 setRefreshing(false)
猜你喜欢
  • 1970-01-01
  • 2017-10-03
  • 2021-04-14
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
相关资源
最近更新 更多