【问题标题】:Android Gridview is not refreshed while pressing back button按下后退按钮时不刷新Android Gridview
【发布时间】:2014-04-28 09:22:51
【问题描述】:

我在一项活动中有一个网格视图。我使用数组列表设置了适配器。 Gridview 正在显示存储在数据库中的项目列表。假设它是一些产品。 当我单击网格视图中的任何产品时,它会将我导航到产品详细信息屏幕。 从产品详细信息屏幕我可以删除产品。如果我删除产品并按返回按钮,它将导航到产品列表屏幕。

预期:产品列表屏幕将出现没有删除的项目。

实际:产品列表屏幕带有已删除的项目。触摸此项目时,它不会做任何事情。

支持我的问题,请看下图

【问题讨论】:

  • 您需要从ArrayList 中删除要传递给GridView 的项目并调用notifyDataSetChanged
  • Atcually 在网格视图中传递的项目是新鲜的,但有些 UI 没有改变。我已经在适配器上完成了 notifyDataSetChanged 但它不起作用。
  • 我正在从 onResume 重新初始化整个 UI,是否可能导致此问题?

标签: android gridview back-button


【解决方案1】:

您已在 OnResume 活动方法中从 db 获取 gridview 项目。当您删除任何项目然后返回时,它将调用上一个活动的 OnResume 方法,您将在其中获取新列表,并在网格上调用 notifyDataSetChanged(),以重新创建视图

【讨论】:

  • 是的,我正在 onResume 做
  • 那么他们必须从数据库中删除该项目,否则删除后你将无法进入gridview
  • 如果删除确实有问题,那么当我从导航重新打开同一个屏幕时,它不应该出现。
  • 我正在从 onResume 重新初始化整个 UI,是否可能导致此问题?
  • 它也在处理片段,因为我在适配器中更新数据源并调用 notifydatasetchanged 并完成。
【解决方案2】:

尝试一些类似的东西:

if (homeGridViewDatas.size() > 0) {
        homeGridViewAdapter = new HomeGridViewAdapter(activity, context,
                homeGridViewDatas);
        gvHome.setAdapter(homeGridViewAdapter);
        homeGridViewAdapter.notifyDataSetChanged();

    }

【讨论】:

  • 我已经在适配器上完成了 notifyDataSetChanged 但它不起作用。
  • 对不起,我无法发布代码,否则我不会准备图片。
  • 我正在从 onResume 重新初始化整个 UI,是否可能导致此问题?
【解决方案3】:

您应该通过调用notifyDataSetChanged 来通知gridadapter 发生了哪些变化。在onResume应该没问题。或者当你也更新它时。

【讨论】:

  • notifyDataSetChanged 不适用于 Gridview
  • 不是 GridView,GridAdapter。 (适配器)
  • 我已经在适配器上完成了 notifyDataSetChanged 但它不起作用。
  • 你确定吗?你能检查一下删除后 ArrayList 的 .size 是否改变了吗?
  • 是的,大小已更改,我已使用日志和断点进行检查。
【解决方案4】:

当我点击网格视图中的任何产品时,它会将我导航到 产品详细信息屏幕。

当您从 gridView 活动(产品列表屏幕)转到详细活动(产品详细信息屏幕。)时,详细活动将在您的堆栈中的 gridView 活动之上启动。

如果我删除产品并按返回按钮,它将导航到 产品列表屏幕。

当您在详细信息屏幕中删除特定产品并按下后退按钮时,详细信息活动将从堆栈中删除,因此位于详细信息活动下方的 gridview 活动将进入前台并变得可见。

产品列表屏幕带有已删除的项目。触摸此项目时 它什么也不做。

但是,您的 gridView 活动仍然具有以前的数据。因此它会显示旧数据并且触摸时没有任何反应,因为实际数据与适配器中的数据不同。

解决方案:

您需要通知该活动中的 gridView 适配器,数据已更改,视图必须相应更新。

由于onResume() 在每次活动进入前台并且可见时都会被调用,因此在gridadapter 上调用notifyDataSetChanged() 是更好的选择。

【讨论】:

  • 我正在从 onResume 重新初始化整个 UI,是否可能导致此问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多