【问题标题】:How can I update the item of recyclerview when I come back to list in android当我回到android中的列表时如何更新recyclerview的项目
【发布时间】:2017-10-19 08:21:51
【问题描述】:

在我的应用程序中,我有一个Activity,在这个Activity 中,它在RecyclerViewAdapter 的帮助下显示了一个项目列表,并从数据库中获取项目。

在数据库中,我有一个名为 Place 的表,其中包含 7 个字段,其中一个字段是 interest,默认值为 0,数据类型为整数。

当我单击列表中的一个项目时,这会打开新的Activity,其中包含该项目的所有详细信息。其中一个细节是interest。 c interest 的值和 Star 图标。如果值为 0,则图标为黑色,否则为金色。

那部分工作正常。当我单击Star 图标时,数据库中interest 字段的图标和值成功更改。但是,我的问题是:

当我回到显示项目列表的Activity 并返回到该特定项目时,Star 图标的更改不会反映。示例:首先图标是黑色的,我通过单击将图标更改为金色并将interest字段的值更新为1。只有当我完全关闭应用程序并再次重新打开时,更改才能正确显示.

有什么想法吗?

【问题讨论】:

  • @UltimateDevil 正确,好的。

标签: android android-recyclerview


【解决方案1】:

您必须将更改的 Place 对象从 All Details Activity 传递回项目列表 Activity,然后通知并更改适配器中的项目。

首先,你必须开始一个监听结果的活动:

Intent intent = new Intent(this, AllDetailsActivity.class)
intent.putExtra("place", place);
startActivityForResult(intent, 1000)

当您在所有详细信息屏幕上更改并确认更改时,您必须返回更改的对象和结果,如下所示:

setResult(Activity.RESULT_OK, new Intent().putExtra("returned_place", place));

然后你必须在 Activity 中实现 onActivityResult,你有一个这样的对象列表:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
     if(request == 1000 && resultCode == Activity.RESULT_OK) {
        adapter.changeItem(position, (Place) data.getExtras().get("returned_place"))
     }
}

并且用于更改项目的适配器功能应该是这样的:

public void changeItem(int position, Place place) {
    items.set(position, place);
    notifyItemChanged(position);
}

您还必须保存单击的 Place 对象的位置才能知道您必须更新哪个单元格。

【讨论】:

    【解决方案2】:

    如果不确定数据在 recyclerView 中的位置,可以从适配器调用 notifyDataSetChanged() 方法。

    不过,最好从适配器调用 notifyItemChanged(position) 方法来仅更新特定 recyclerView 对象的视图。

    【讨论】:

    • 在适配器中,我可以将项目的位置发送到第二个活动,当返回到 onActivityResult 方法中的第一个活动时,我调用 notifyItemChanged(position) 正确??
    • 如果我理解正确的话,是的,我们没有您提供的任何代码 sn-ps,所以这使问题变得更加困难。
    猜你喜欢
    • 2020-11-09
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多