0

我在自定义列表视图适配器中的 getView() 发生了一个异步调用,如下(最后一行):

public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    holder=new Holder();
    View rowView;
    rowView = inflater.inflate(R.layout.list_posts_item, null);

    holder.tvTitle=(TextView) rowView.findViewById(R.id.tvTitleNamePost);
    holder.ivPrimaryImage=(ImageView) rowView.findViewById(R.id.ivPrimaryImage);
    holder.ivPrimaryImage.setId(position);
    holder.ivPrimaryImage.setTag(listOfPosts.get(position).getPostId());
    holder.tvLocality=(TextView) rowView.findViewById(R.id.tvLocalityPosts);
    holder.tvDateCreated=(TextView) rowView.findViewById(R.id.tvDateCreated);


    holder.tvTitle.setText(listOfPosts.get(position).getTitle());
     holder.ivPrimaryImage.setImageBitmap(listOfPosts.get(position).getImage());

    holder.tvLocality.setText(listOfPosts.get(position).getLocality());
    holder.tvDateCreated.setText(listOfPosts.get(position).getCreatedDate());
    postId = listOfPosts.get(position).getPostId();
    Image image = new Image();
    image.setImg(holder.ivPrimaryImage);
    if(!"N".equalsIgnoreCase(listOfPosts.get(position).getHasImage()))
        new GetPrimaryImages().execute(image);
    return rowView;
}

问题是,每次执行 getView 时都会发生异步调用。我们可以限制调用,仅当考虑的项目是 imageView 时?

4

2 回答 2

0

这有助于:

android:layout_height="wrap_content"

在我的 ListView 定义中。将其更改为 fill_parent/match_parent 将避免它。

于 2015-09-01T19:03:52.140 回答
0

你不应该真的从 getView() 调用 async,因为它最好保持尽可能轻,并通过正确使用 viewholders 和 recycler 视图来尽可能少地调用它。我不是 100% 你用什么方式完成了其余的代码,所以这里是对所有细节的一个很好的介绍。网上还有许多其他深入的解释,将介绍您需要了解的有关 getView() 性能的所有内容。

于 2015-09-01T17:14:04.483 回答