notificationDataSetChanged() 使列表刷新并滚动跳回顶部

2023-12-01

我正在尝试实现无限滚动列表视图,但是当我打电话时notifyDataSetChanged()整个列表刷新然后滚动位置返回到顶部。

这是正常行为吗?如何让它简单地添加添加的项目而不刷新并保持滚动位置?


这种行为是不正常的。在没有看到您的代码的情况下,我可以建议以下内容:

1) 你没有打电话notifyDataSetChanged()来自 UI 线程。正确的做法:

runOnUiThread(new Runnable() {
    public void run() {
        adapter.notifyDataSetChanged();
    }
});

2) 您无意中或无意中拨打了adapter.notifyDataSetInvalidated();

3)在你的适配器中你覆盖adapter.notifyDataSetChanged();方法并添加了转到顶部的说明

4) 如果您使用列表来填充适配器 - 您每次都提供新列表,因此适配器设置会刷新。您应该始终提供相同的列表。但是您可以根据需要更改它。如果您要重置列表,请使用list.clear代替list = new ArrayList();

这是我的适配器的示例:

public class Adapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater = null;
    public ImageLoader imageLoader;

    public MediaItemAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data = d;
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader = new ImageLoader(activity.getApplicationContext());
    }

    public int getCount() {
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        if (convertView == null) {
            vi = inflater.inflate(R.layout.item_composer, null);
        }
        TextView title = (TextView) vi.findViewById(R.id.item_title); // title
        TextView price = (TextView) vi.findViewById(R.id.price);


        return vi;
    }


}

致电索取适配器:

List myList = new ArrayList<HashMap<String, String>>();
Adapter ma = new Adapter(this, myList);

在适配器初始化之前 myList 可以为空。

然后对我的列表进行一些操作:

myList.add(someElement);
ma.notifyDataSetChanged();

如果您需要删除所有项目:

myList.clear();
ma.notifyDataSetChanged();

这样的实现是无穷无尽的,我看到了超过 15000 个元素,没有任何问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

notificationDataSetChanged() 使列表刷新并滚动跳回顶部 的相关文章

随机推荐

  • Python 多处理和 wxPython 协同工作

    我有以下问题 我编写了一个脚本 该脚本最多同时运行四个进程 通过命令行使用它时 它就像一个魅力 然后我决定使用 wxPython 编写一个 GUI 并且我很快发现 GUI 和脚本需要在不同的进程中运行 以便在另一个执行某些操作时两者都保持可
  • C# WCF:在提供对服务的访问的共享库中拥有单个 app.config

    我目前有一个包含几个项目的解决方案 其中之一是 WCF 服务 我创建了另一个带有静态类的项目 该静态类基本上提供了通往 WCF 客户端实例的网关 如下所示 public static class WSGateway public stati
  • PostgreSQL - 加入 string_agg

    我有三张桌子 Students student id name 1 Rhon Subjects subject id subject name student id 1 Physics 1 2 Math 1 Grades grade id
  • 如何从Python中的字典中提取所有值?

    我有一本字典d 1 0 3246 2 0 9185 3 3985 如何提取所有值d到一个列表中l 如果您只需要字典键1 2 and 3 use your dict keys 如果您只需要字典值 0 3246 0 9185 and 3985
  • 将玩家移动到精确的触摸/鼠标点击位置

    在我的 2D unity 游戏中 我试图将精灵移动到触摸 光标的位置 现在是单击鼠标 我的精灵位于 173 48 52 1 位置 然而 当我单击一个可能距离几个像素的位置时 我的位置会更改为 399 129 0 并且我的精灵显然被扔进了广阔
  • 获取元素的 XPath 列表[重复]

    这个问题在这里已经有答案了 我有具有特定名称的元素的 NodeList 并且我希望拥有所有这些节点的 XPath 我找不到如何做到这一点的方法 NodeList nList doc getElementsByTagName definiti
  • Laravel5 - 非静态方法不应静态调用

    我不知道这个错误是什么 请有人给我一些解释 on my UserController php class UserController extends Controller public function viewCard card id
  • 使用 PHP 合并图像时的图像透明度和 Alpha

    所以我在 PHP Doc 上找到了一些代码 并对其进行了稍微编辑以合并我拥有的两个图像 然后图像将保存在服务器上的文件夹中 但是有一个小问题 我无法弄清楚为什么会发生这种情况 首先我的代码 glassurl GET GlassImg fra
  • 有没有办法只执行文档测试,忽略打印函数调用?

    假设来说 我的功能返回一个值 and 有很多打印语句 也许 100 个或更多 有没有办法跑doctest这样所有其他打印工作都可以被忽略 跳过 我熟悉 SKIP指令 用于跳过doctest示例 即当我执行我的函数 或将我的模块作为脚本运行
  • 使用本地设置进行 django 测试

    Python 2 7 姜戈1 2 当我测试 Django 应用程序时 我遇到了奇怪的 local settings 行为 我有我的
  • 将完成处理程序添加到presentViewControllerAsSheet(NSViewController)?

    我试图呈现一个工作表配置视图 AddSoundEffect 对于我的主窗口 视图控制器 我正在使用故事板 当配置视图控制器被关闭时 采用在AddSoundEffect查看并将其传递回主视图 我当前在主视图控制器中的代码 presentVie
  • 获取args[0]之后的所有参数discord.js

    我试图制作一个静音命令 并且我正在添加一个系统 您可以在其中出于某种原因将它们静音 机器人会回复 用户的用户名 已静音 原因 原因 对我来说 args 0 只是提到您想要静音的用户 但我不知道如何获取 args 0 之后的所有内容 我尝试过
  • “JSON”未定义

    I m trying to load the Chromecast background website into a c WebBrowser but am getting 我认为发生这种情况是因为网络浏览器默认使用 IE7 这可能无法与
  • 在 Codeigniter 中的所有控制器上具有固定视图

    为了在 CodeIgniter 中加载视图 我必须重复加载固定视图 页眉和页脚 这对于每个与视图相关的控制器重复加载有点烦人 目前 当我想在 CI 中加载视图时 我会执行以下操作 this gt load gt view header th
  • 如何在具有不同域的同一 IP/服务器上托管多个 Node.js 站点?

    我有一个Linux服务器 绑定了一个IP 我想在该 IP 上的服务器上托管多个 Node js 站点 每个站点 显然 都有一个唯一的域或子域 我希望它们全部位于端口 80 上 我有什么选择来做到这一点 一个明显的解决方案似乎是让所有域都由充
  • 如何通过命令行更改现有文件夹的图标? (Windows 10)

    我的桌面上有一个文件夹和 12 个不同的图标 我想使用任务计划程序创建一个计划任务 只要我的电脑处于打开状态 该任务就会运行并每 15 分钟更改一次文件夹的图标 我做了研究 发现了这段代码 attrib h r c test desktop
  • iPhone核心位置:地图类型更改时自定义图钉图像消失

    我有一个位于 MKMapView 上的分段控制器 当我更改 MKMapType 时 自定义图钉的图像将恢复为默认的红色 标题和副标题以及坐标保持不变 任何人都可以阐明可能的解决方案吗 不久前我也遇到了类似的问题 为什么自定义 MKMapVi
  • 如何判断 Sympy 变量是否为复数?

    我正在编写一个涉及求解这个方程的代码 X solve Theta Mod Eqn Ramp Equation x PT C x 我正在使用 sympy 库 现在方程有 7 个根 很少是复数根 很少是实数根 我无法将它们分开 因为isinst
  • 服务永久处于“启动”状态

    我用 C 编写了一个 Windows 服务 它将 wav 文件转换为 mp3 然后将它们存储在远程服务器上 在我的开发平台 操作系统 WinXP SP3 上 服务启动正常并按预期运行 当我将其安装到生产机器 操作系统 WinServer 2
  • notificationDataSetChanged() 使列表刷新并滚动跳回顶部

    我正在尝试实现无限滚动列表视图 但是当我打电话时notifyDataSetChanged 整个列表刷新然后滚动位置返回到顶部 这是正常行为吗 如何让它简单地添加添加的项目而不刷新并保持滚动位置 这种行为是不正常的 在没有看到您的代码的情况下