【问题标题】:How to restrict the execution of some code for a particular item in getView?如何限制getView中特定项目的某些代码的执行?
【发布时间】:2015-11-27 00:13:15
【问题描述】:

我有一个来自自定义列表视图适配器中的 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 时?

【问题讨论】:

  • 你的意思是当你“按下”一个 ImageView 时?
  • @MicheleLacorte 否。由于我的适配器有 6 行,我希望以下仅执行 6 次。新的 GetPrimaryImages().execute(image);但它在一行中执行 6*number 个小部件。我想限制它。
  • 迭代 listOfPosts.size();并且设置计数器具有静态,我知道这不是最好的方法,但它应该可以工作
  • @MicheleLacorte 我没听懂你。能否请您提供一段代码支持?
  • listOfPosts 有 6 行吧?

标签: android android-listview android-asynctask getview listview-adapter


【解决方案1】:

你不应该真的从 getView() 调用 async,因为它最好保持尽可能轻,并通过正确使用 viewholders 和 recycler 视图来尽可能少地调用它。我不是 100% 你用什么方式完成了你的其余代码,所以这里有一个很好的run through of all the details. 在线还有许多其他深入的解释,这些解释将涵盖你需要了解的有关 getView() 性能的所有内容。

【讨论】:

    【解决方案2】:

    这有帮助:

    android:layout_height="wrap_content"
    

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

    【讨论】:

      猜你喜欢
      • 2010-11-14
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 2016-10-15
      • 2012-03-15
      • 2012-05-19
      相关资源
      最近更新 更多