【问题标题】:Reusing adapter for realm objects重用领域对象的适配器
【发布时间】:2016-05-05 17:07:10
【问题描述】:

我想知道哪种方式最好将适配器从一个活动传递到另一个活动。 这是我的观点;我使用领域作为 ContentProvider 和一个 recyclerview 来显示一些数据。我的 realResults 变量有一个带有以下 onChange() 的 changelistener:

    public void onChange() {
          adapter.notifyDataSetChanged();
          ...

所以任何时候我的数据更改 onChange() 都会被调用,并且我的 recyclerview 会得到更新,这非常酷。 在我打电话的另一项活动中

 adater.notifyItemRemoved();

不幸的是,这个电话紧随其后

adapter.notifyDataSetChanged();

这样被移除项目的动画是不可见的。 为了使动画对用户可见,我想避免在 onChange() 中调用notifyDataSetChanged,如上所述。 为此,我想使用某种方法的辅助类,例如

public static Adapter getAdapter();

使用返回的适配器,我会根据情况调用 notifyDataSetChanged() 或 notifyItemRemoved()。

我的问题是想知道拥有这样一个帮助类(如上所述)是一个好主意,还是有更好的方法将适配器从一个活动传递到另一个活动?

谢谢

【问题讨论】:

  • 我认为传递适配器或使用静态 getter 从另一个活动访问适配器不是一个好主意。你可以这样做,但是它把太多的东西耦合在一起,这违背了 Android 的设计理念。在 Realm 的细粒度通知 github.com/realm/realm-java/issues/989 之后,您的用例将得到很好的支持。目前,一个想法是您可以维护自己的RealmObject 列表,并在onChange() 中检查对象是否被RealmObject.isValid 删除。显然,如果您的列表很长,这将不是优化的方式,因为它必须遍历列表。

标签: android android-recyclerview adapter realm


【解决方案1】:

好吧,我想出了一个解决方法。

在我的适配器类中,我确实覆盖了

getItemId(int position)

方法,我也调用

adapter.setHasStableIds(true)

在设置回收器视图的适配器时。然后,回收器视图将检测项目的任何插入和移除,并根据需要为其设置动画。

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    相关资源
    最近更新 更多