当前位置: 代码迷 >> java >> 有什么已知的习惯可以有效地加载Android ListViews?
  详细解决方案

有什么已知的习惯可以有效地加载Android ListViews?

热度:70   发布时间:2023-07-25 19:17:56.0

基本解释这种情况:
我正计划为学生创建一个学校时间表应用程序。 我的应用程序当前只是一个基本的MainActivity,它具有一个侧边抽屉,如果您单击某个项目,它将使选定的Fragment膨胀。 我的问题涉及我当前正在研究的主题列表。 单击“主题片段”片段中的FAB时,它将打开一个活动,您可以在其中添加主题。 添加主题后,该主题将显示在“ 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中创建列表的旧方法。 是更好/更快的方法。

  相关解决方案