Java 通过其他活动的Backbutton更新Recyclerview onResume的一项的正确方法 MainActivity有一个带有项目列表的Recyclerview。 单击其中一个项目UpdateActivity将在可以更改该项目的位置启动 当通过单击BackButton进行导航时,我只想更新此特定的单个RecycleServiceItem

Java 通过其他活动的Backbutton更新Recyclerview onResume的一项的正确方法 MainActivity有一个带有项目列表的Recyclerview。 单击其中一个项目UpdateActivity将在可以更改该项目的位置启动 当通过单击BackButton进行导航时,我只想更新此特定的单个RecycleServiceItem,java,android,android-recyclerview,Java,Android,Android Recyclerview,实现这一目标最干净的方法是什么?我应该在哪里更新项目? 如果我在重写的BackButton操作中使用意图并从那里启动MainActivity,则RecyclerView为空,我需要再次加载所有项 我可以将所有加载的项目与位置信息一起传递给UpdateActivity,并在UpdateActivity中更新项目,但如果在MainActivity中有更干净的解决方法,我希望避免将所有数据传递给此活动。根据我的观点 在Mainactivitylist活动中单击已单击的项目后,可以保持该项目的位置,如果

实现这一目标最干净的方法是什么?我应该在哪里更新项目? 如果我在重写的BackButton操作中使用意图并从那里启动MainActivity,则RecyclerView为空,我需要再次加载所有项

我可以将所有加载的项目与位置信息一起传递给UpdateActivity,并在UpdateActivity中更新项目,但如果在MainActivity中有更干净的解决方法,我希望避免将所有数据传递给此活动。

根据我的观点

在Mainactivitylist活动中单击已单击的项目后,可以保持该项目的位置,如果该位置变量不为null,则在onStart/onRestart/0中,只需重新加载该特定项目即可


您可以使用onActivityResult方法从update activity传回位置或项目唯一id。

我相信您会将当前单击项目的数据传递给UpdateActivity,因此更新完成后,您可以将更新后的数据发送回MainActivity

然后,您可以替换列表中的数据,并为适配器调用notifyItemChanged


有多种方法可以在不传递所有数据的情况下实现这一点

如果您使用的是数据绑定,您可以只发送这个特定的项,并使您的UiModel extends BaseObservable和更改任何属性。像这样更改项,这将反映您的UI,而无需额外代码

class ItemViewModel(): BaseObservable() {
@get:Bindable
var changableItem: DataType by Delegates.observable(changableItem) { _, _, _ ->
    notifyPropertyChanged(BR.changableItem)
}
您可以在“活动结果”中使用,并相应地更改“回收器”视图项

您可以在此处找到一个示例:

您可以使用RXJava或任何其他库使用EventBus,并使用RecyclerView notifyItemChanged 就我个人而言,我更喜欢第一种选择。
请随时询问任何澄清。

一种方法是将您的数据列表和单击的位置存储在某个位置。返回活动后,使用notifyItemChangepos使用更改的数据更新您的recyclerview,有效负载

然后通过使用startActivityForResult预期结果并在按下Back按钮的同时完成更新活动并发送意图来启动更新活动。然后在MainActivity中收到意图时,尝试使用RecyclerView adapter的adapter.notifyItemInserted方法并对其进行更新

尝试使用这种方法

adapter.notifyItemInserted(); //in case of addition
adapter.notifyItemChanged(position); // in case of any updation

问题是我在列表中加载了大量数据,在用户切换到UpdateActivity之前,他看到了一个完整的列表。当他恢复工作时,他会突然看到一张空名单,然后又逐渐填满。我的设想是在用户再次看到主活动之前更新单个项目。请参见答案中的上述说明。谢谢您尝试一下,听起来很简单