我想在不阻止用户界面的情况下向我的LinearLayout
添加观看次数。
@Override
protected void onPostExecute(RequestMySellingList result)
{
for (MySellingData data : result.data)
{
LinearLayout rowSelling = (LinearLayout) inflater.inflate(R.layout.row_selling_item, null);
ImageView iv_sellingItemImage = (ImageView) rowSelling.findViewById(R.id.iv_sellingItemImage);
iv_sellingItemImage.setImageBitmap(data.bitmap);
// Add rowSelling to the main list holder
ll_sellingList.addView(rowSelling);
}
}
注意: ll_sellingList
是LinearLayout
,其中包含条目
我无法使用onProgressUpdate()
,因为我得到了一个很长的json响应,我必须使用onPostExecute()
方法来获取完整的json请求。
问题是如果请求很长 - addView会阻止UI
答案 0 :(得分:0)
它将阻止UI,因为inflater.inflate()
是一个繁重的操作。此外,findViewById
也不是一个廉价的操作。你在for循环中多次调用它们。所以,最好将它们移出for循环。尝试在不阻止UI的情况下更快地运行。
@Override
protected void onPostExecute(RequestMySellingList result)
{
LinearLayout rowSelling = (LinearLayout) inflater.inflate(R.layout.row_selling_item, null);
ImageView iv_sellingItemImage = (ImageView) rowSelling.findViewById(R.id.iv_sellingItemImage);
for (MySellingData data : result.data)
{
iv_sellingItemImage.setImageBitmap(data.bitmap);
// Add rowSelling to the main list holder
ll_sellingList.addView(rowSelling);
}
}
答案 1 :(得分:0)
在使用手风琴样式布局时,我能够做到这一点,其中每个折叠项也包含列表的一个子集,因为这种布局不适用于 RecyclerView Viewholder 模式。我使用 Concurrent 作为 Asynctask 的替代品,然后在 doInBackground
所有 Glide 获取图像和 addView()
调用都使用 new Handler(Looper.getMainLooper()).post(() -> {//Your Code});
包装,因为 Glide 和添加视图要求它在 UI 线程上运行。每个布局的添加都会在屏幕上一一看到,但好在 Choreographer 不再跳帧。