问题标签 [notifydatasetchanged]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1114 浏览

android - Adapter 数据变化时更新 ListView Items 的背景

我有一个列出 ListFragment 中项目的应用程序。根据项目状态,每个项目都有不同的背景颜色。该适配器是 SimpleCursorAdapter 的子类,因为项目存储在 SQL 中。这些项目的编辑发生在不同的片段中。当状态改变时,我使用 AsyncTask 在 GUI 线程上的 Adapter 上触发 notifyDataSetChanged()。但是我的列表没有更新。

我知道我在 GUI 线程上,因为我覆盖了 notifyDataSetChanged 类以进行检查。同样的痕迹也告诉我我正在达到例程。:

我将不胜感激任何建议。感谢您的时间与兴趣。

这是整个适配器:

0 投票
2 回答
1012 浏览

android - 无法在打开的 Spinner 上 notifyDataSetChanged()

  1. 我的Spinner. 我单击一个刷新按钮,该按钮触发一个 API 调用,该调用以Spinner.
  2. 我立即点击 Spinner 打开它。
  3. API 调用在Spinner打开并调用notifiyDataSetChanged()它时结束(我可以保证这一点,我检查了日志,所以数据在那里)。
  4. 不幸的是,微调器不会刷新它的视图。因此,如果我希望刷新后有 6 个项目而不是 5 个,我仍然会看到 5 个。

如果我在不打开 Spinner 的情况下重复测试,并在刷新完成后打开它,我会看到 6 个项目。所以问题出在notifyDataSetChanged()方法上。

0 投票
2 回答
1514 浏览

android - notifyDataSetChanged 不刷新列表视图

最初,我从服务器获取数据列表并将其设置为 listview。

向下滚动列表视图时,我正在从服务器收集数据并调用我的自定义适配器的 notifydatasetchanged。

在自定义适配器的 getView() 方法中,我通过 asyntask 从服务器下载图像。当它成功下载并存储在本地时。然后只是尝试在该异步任务的 onPostExecute 刷新列表视图。但它没有得到刷新。

onPostExecute 的日志正在打印,但 listview 没有刷新。

public void loadBitmap(MainActivity mainActivity, String imageKey,ImageView imageView, boolean isScrolling) { final Bitmap bitmap = getBitmapFromCache(imageKey);

0 投票
2 回答
2230 浏览

android - 从另一个类更新 ViewPager 的片段:

在这个问题之后:

如何在 ViewPager 中重新创建所有片段:

我有这些课程:

和一个FragmentActivity

现在FragmentActivity我有这个听众:

这很好notifyDataSetChanged()用,被调用了,ViewPager 的片段正在按照我的意愿重新创建。

问题:当我尝试notifyDataSetChanged()从另一个类调用适配器的方法时(在我的情况下,它是一个负责解析从服务器接收到的数据的类)片段保持不变。

我试图这样做:我在我的FragmentActivity类中创建了这些方法(带有 的那个ViewPager):

并从第二堂课尝试了以下内容:

或者:

但这些都不起作用。奇怪的是,当我运行这个时:

片段确实被删除了,但是我无法使用从服务器端接收到的新数据重新创建新的片段集。

我在这里想念什么?我应该如何FragmentActivity从另一个类中重新创建所有片段?

任何援助将不胜感激。

0 投票
2 回答
8371 浏览

android - 在 OnClickListener 中刷新 Android ListView 数据

我一直在做一个 Android 的个人项目,但遇到了一个关于使用 ListView 的 Activity 的奇怪情况。问题的基础是我有一个项目列表,每个项目都有 2 个按钮,编辑和删除。现在我正在实现删除按钮,该按钮可以正常工作,但不能正确更新 ListView。相反,它将刚刚删除的内容放在列表顶部。每当我重新导航到该活动时,它当然会刷新。

现在在自定义 BaseAdapter 中检测到删除按钮,当我调用 notifyDataSetChanged 时,会发生上述情况,而不是删除现在删除的项目。如何正确更新适配器类中的列表?

我意识到对此存在一些问题,但我无法整合它们,我认为可能有效的解决方案并不能真正解释它们是如何工作的;我正在使用这个项目来更多地了解 Android 应用程序开发,所以我更希望得到一些解释的答案,尽管当然感谢任何帮助!谢谢!

这是相关的代码。请注意,这是一个未完成的项目,因此其中有一些未使用/不完整的东西。请忽略这些。

编辑项目活动:

这是适配器类:

编辑:解决方案涉及 Adam 提供的通货膨胀解释,但需要完全重新填充 dpList,即

阿努普建议的。

0 投票
1 回答
1216 浏览

android - 在 CursorAdapter 中更改光标未正确更新列表项视图

这个问题与 StackOverflow 上的许多其他问题非常相似,但由于与此处的其他问题相比方法不同,我认为它值得自己发表。

我有一个扩展的自定义适配器CursorAdapter。我正在更新数据并调用notifyChange适当的 URI 以刷新光标。在调试中,我可以看到它工作正常。

不幸的是,我的列表视图没有被重新创建。我需要重新创建它们的原因是因为我newView在适配器上的实现:

问题是调用notifyChange正在更新列表数据,但它没有通过 重新创建我需要的视图newView

以下是我尝试过的其他一些同样无效的方法:

  • adapter.notifyDataSetChanged()数据更新后调用。
  • 在数据更新后contentResolver.notifyChange(...)调用。adapter.notifyDataSetChanged()
  • 调用adapter.changeCursor(newCursor)后跟adapter.notifyDataSetChanged().
  • 调用view.invalidate()更改的特定列表项。

关于如何解决这个问题的任何其他建议?

编辑:我可能完全只是采取了错误的方法。我误解了适配器内视图的回收,我发现回收时使用了错误类型的视图。因此,我可能需要使用另一种方法来设置我的视图样式。我首先采用这种方法的原因是因为我希望使用样式,除了在 StackOverflow question 中解释的膨胀视图之外,无法以编程方式设置样式。我对在正确回收列表项视图的同时利用该答案的方法持开放态度。

0 投票
1 回答
5995 浏览

android - GridView 未使用 notifyDataSetChanged() 更新

我有一个Activitywith GridView, 里面有图片。图像是从设备的 SD 卡中解析的。启动Activity后,图像会使用AsyncTask.

问题是GridView下载图像时不会更新。如果将更多图像添加到目录中(即如果下载了更多图像),我希望GridView更新它。我试过了notifyDataSetChanged()invalidateViews()但是他们没有帮助。

这是我的 MainActivity、图像适配器和AsyncTask. 请尝试告诉我我在哪里犯了错误。

主要活动:

getView()图像适配器:

图片下载:

0 投票
1 回答
605 浏览

android - Android notifydatasetchange() 创建新视图,同时需要更新视图并保持布局位置

我用horizo​​ntalView 制作了listview。在此 ListView 的每个位置都包含 Horizo​​ntalView,其中有一组可以水平滚动的图像。

每当 List 在垂直滚动时到达其末尾时,我都会调用 listview 的 notifydatasetchange() 方法,实习生会创建新的列表视图。

我的列表视图是这样的

在此处输入图像描述

在此处输入图像描述

我的问题是:

假设我在 ListView 位置 0 的水平视图的图像 12。当 notifydatasetchange() 调用时,它会自动刷新所有视图,并且 Image 位置在 ListView 的位置 0 处变为 0。

用户为特定图像再次滚动可能会很烦人。

我需要保持图像在视图上的位置,以便在重新加载时自动显示为调用 notifydatasetchange() 之前的状态。

注意:我使用两个适配器来填充 ListView 中的水平滚动视图。

适配器 1

适配器 2

0 投票
1 回答
1109 浏览

android - 使用按钮 INSIDE 适配器刷新 ListView

我有我的 ListAdapter

里面

我有

在里面onClick()我从数据库中删除了一行(使用我之前保存在视图中的位置)。之后我想看到我的 ListView 更新。我应该使用哪个指令OnClick来做到这一点?

我试过了,notifyDataSetChanged()但它似乎不起作用。

解决方案

我只从数据库中删除了该行,但忘记更新适配器的值。完成后,notifyDataSetChanged()完美运行!

0 投票
2 回答
1573 浏览

android - 使用 SQLite 的 notifyDataSetChanged

很抱歉问什么似乎是一个简单的问题,但我一直在寻找解决方案几个小时,现在我再也受不了了。

我的应用程序非常简单。我在 SQLite 数据库中有“任务”,我用这个数据库填充了一个 listView,如下所示:

它返回一个任务的arrayList。

问题是,当我单击对话框删除任务时,它会从数据库中删除它,但它仍然在屏幕上,这就是我需要刷新 listView 的原因。

但它不起作用。我认为这是因为我从数据库中删除了任务,但没有从适配器中删除,但我不太确定。无论如何,如果有人有解决方案......