java - 是否有任何已知的习惯来高效加载 Android ListViews?
问题描述
基本上解释一下情况:
我正计划为学生创建一个学校时间表应用程序。我的应用程序目前只是一个基本的 MainActivity,它有一个侧抽屉,如果你点击一个项目,它会膨胀选定的 Fragment。我的问题是指我目前正在处理的主题列表。单击“SubjectsFragment”片段中的 FAB 时,会打开一个 Activity,您可以在其中添加主题。添加主题后,它会显示在“SubjectsFragment”中 - 所以,非常基本。我已经完成了所有数据库逻辑并创建了一个自定义适配器。但这些事情甚至都没有引起问题。
现在我的问题是:
当我打开 Fragment 时,它在填充 ListView 时滞后了很短的时间。虽然只需要很少的时间,但肯定是很明显的,这意味着 UIThread 被阻塞了。
我没有找到任何与我目前使用的实现不同的实现,我想知道是否还有其他填充 ListView 的方法。使用 AsyncTask 没有意义,因为 ListView 的填充仍然发生在 UIThread 上。
这是我的实现的一小段代码:
mListView = rootView.findViewById(R.id.subjectsListView);
ArrayList<Subject> subjectList = new ArrayList<>();
subject = new Subject("A", "B", "C", "D");
for (int i = 0; i < 100; i++) { //for loop just to add 100 items
subjectList.add(subject);
}
ListAdapterView adapter = new ListAdapterView(getActivity(), R.layout.fragment_subjects_listitem, subjectList);
mListView.setAdapter(adapter);
为了理解我的问题,没有必要知道我的适配器是如何工作的,因为 Android Studio 的预加载适配器也会发生这种情况。在此代码段中,列表中添加了 100 个项目。但遗憾的是,微滞后也发生在只有 20 件商品的情况下。
有没有更好/不同的方式来实现这一点而不是让它滞后?抱歉,如果这听起来很愚蠢,但我对 Android 编程还是很陌生,并且一直在学习。
解决方案
ListView 是如何在 Android 中创建列表的旧方法。有一种更好/更快的方法,RecyclerView。例 1例2
推荐阅读
- php - fsockopen 总是 操作超时
- excel - 如何使用 Power Query 在一行中删除重复项?
- excel - 如何将多个 Excel 工作表迁移到一个主工作簿
- python - 在 tablewidget Qt5 Python 中显示 CSV 文件
- r - 如何将字符串转换为R中的嵌套列表?
- kql - 使用 KQL 输出多个汇总列表
- vue.js - 如何使用 vuejs 为更改的元素设置动画?
- python - Pybind11 类型错误。Python 无法识别已知类型
- node.js - 节点:Express-validator isString() 是否必要?
- gradle - 如何构建 groovy-2.5.8.jar?