gpt4 book ai didi

android - 数组适配器 notifyDataSetChanged() 将不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:21:58 24 4
gpt4 key购买 nike

我在这个问题上浪费了太多时间所以不得不再问一次。我完全不知道为什么会这样。

我有一个数组适配器 (aAdapter) 和一个数组列表 (aList),我正在尝试放置一个清除按钮来删除数据库中的条目并清除列表。

我的问题是 NotifyDataSetChanged() 无法在我的 onlick 方法中工作:

public void clearDB(View view) {
aList.clear();
aAdapter.notifyDataSetChanged();
HighScoresDB hsdb = new HighScoresDB(HighScoresActivity.this);
hsdb.openDB();
hsdb.clearDB();
hsdb.closeDB();

}

不过它在其他任何地方都适用。我什至尝试将 clear 和 notifyDataSetChanged() 放在另一个方法中并调用它,但这也不起作用但是当我从 onCreate 调用它时确实起作用了....

有什么想法吗?

附注正在清除数据库。

最佳答案

首先,我发现 Android 适配器实现非常有缺陷。当谈到执行任何定制的事情时,似乎对如何使用它有模棱两可的描述,官方文档也没有澄清任何一个。我会很高兴被证明是错误的。

我在 View 中编辑数据时获得一致结果的方式如下:

  • 所呈现的底层数据结构的所有更改都应在 AsyncTask 中完成这是有道理的,因为您正在 UI 线程上更改内容并且不希望出现并发问题。

  • 对底层数据结构的操作应该通过调用适配器方法来执行,所以如果您有一个 ListAdapter,那么您可以使用 addremove 和列表适配器的 clear。这意味着适配器管理 View 通知等。这通常导致必须创建自定义适配器,因为可用的方法是有限的(在 7 之前的 sdk 版本中甚至没有添加全部)。你最终也会让你的适配器充当一个大 fat controller ,虽然我知道我们不应该将 android 视为 MVC 模式,但它似乎仍然是错误的。

  • 我创建了一些应用程序,在这些应用程序中,我绕过适配器调用来对底层数据结构进行操作,并且它一直有效,结果最终变得不可预测,除非您严格管理对 View 的通知。现在我只是通过适配器调用。

因此,尽管我无法解释为什么 notifiyDataSetChanged 在您的 onClick 方法中不起作用。我希望能提供有用的信息,帮助您让您的应用按预期运行。

关于android - 数组适配器 notifyDataSetChanged() 将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8807758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com