我需要向ScrollView添加大约10个视图,我使用以下代码
final LinearLayout item_div = (LinearLayout)activity.findViewById(R.id.item_div);
final LayoutInflater inflater = (LayoutInflater)context.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < itemArray.length(); i++) {
View itemTemplate = inflater.inflate(R.layout.item, null);
item_div.addView(itemTemplate);
}
但问题是这个过程大约需要1-2秒,它会阻塞主UI,等待不是从服务器获取数据,而是直接来自添加视图(它们有点重)。现在我的问题是,我可以使用新线程或后台服务来执行此操作吗?任何类型的线程或后台任务都可以处理这种类型的视图问题,或者在后台执行它是没有意义的,我应该考虑RecyclerView
或其他一些解决方案?谢谢
答案 0 :(得分:1)
我可以使用新线程或后台服务来执行此操作吗
不,您无法从后台线程触摸您的UI或将抛出异常
或者在后台执行它是没有意义的,我应该考虑使用recyclelerview或其他一些解决方案
没有看到你采取的方法的全部目的很难给出任何答案,但如果你只需要可滚动容器RecyclerView
可能会给出帮助。此外,也许您只需要有限数量的孩子视图组合,您可以考虑准备组合布局,然后只需要膨胀一个而不是进行10次单独的通胀。其他方法是从代码创建子视图,但我会将其作为最后一个选项进行检查。
答案 1 :(得分:0)
原来处理我的问题的最好方法是使用ListView和Adapeter甚至更好(但也更难)用户RecycleView。 通过使用ListView
,我设法在我的列表上获得相当不错的性能答案 2 :(得分:0)
我能够通过在 AsynTask 中运行膨胀视图或使用 Concurrent API 来做到这一点,因为我的手风琴/折叠列表列表的场景不适用于 RecyclerView ViewHolder 模式,因为 UI 被阻止,因此跳帧过多以编程方式在 LinearLayout 中添加视图时 .在此处查看我的回答,它可能会给您一些想法https://stackoverflow.com/a/65741410/12204620