首页 > 解决方案 > 是否有任何已知的习惯来高效加载 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 编程还是很陌生,并且一直在学习。

标签: javaandroidperformanceandroid-listview

解决方案


ListView 是如何在 Android 中创建列表的旧方法。有一种更好/更快的方法,RecyclerView例 12


推荐阅读