如何限制getView中特定项目的某些代码的执行?

Posted

技术标签:

【中文标题】如何限制getView中特定项目的某些代码的执行?【英文标题】:How to restrict the execution of some code for a particular item in 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 行吧? 【参考方案1】:

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

【讨论】:

【参考方案2】:

这有帮助:

android:layout_

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

【讨论】:

以上是关于如何限制getView中特定项目的某些代码的执行?的主要内容,如果未能解决你的问题,请参考以下文章

限制数据网格中某些项目的拖放? - 土坯柔性

限制用户执行特定的命令

在getview中重复列出项目位置

Android ListView 不调用适配器的类 getView() 函数

如何限制 CPU 资源 / Shockwave Flash

限制特定仪表板中的某些kibana用户