如何通知自定义适配器所拥有的视图?

时间:2011-02-08 19:13:20

标签: android listview

在我目前的项目中,我扩展了BaseAdapter(使用教程EfficientAdapter作为指南)来处理几种不同的自定义单元格类型,每种类型都有自己的自定义视图。其中一些单元类型启动异步操作(例如,播放和记录媒体)。当他们所属的活动消失时,我想暂停它们(其他几种细胞类型会导致这种情况发生)。有没有办法通知特定视图它所属的ListActivity正在消失?

我的第一个想法是在活动的onPause()方法中迭代视图:

@Override
public void onPause() {
    super.onPause();

    for (int i = 0; i < adapter.getCount(); i++) {
        CustomCellHolder holder = adapter./* Some magic goes here */;
        holder.handlePause();
    }
}

但我无法弄清楚如何迭代列表适配器拥有的视图。有没有办法做到这一点,还是我咆哮错误的树?

如果它是相关的,我的getView方法看起来像这样:

public View getView(final int position, View convertView, ViewGroup parent) {
    CustomCellHolder holder;

    if (convertView == null) {
        /* Create and cache a new view */
        holder = newHolderForItem(someArrayListOfObjects.get(position));

        holder.setItem(feature.attributes.get(position));
        holder.setActivity(MyListActivity.this);

        convertView = holder.getView();
    } else {
        /* Load a cached view */
        holder = (CustomCellHolder) convertView.getTag();

        holder.setItem(feature.attributes.get(position));
        holder.setActivity(MyListActivity.this);
    }

    holder.doSomeStuff();
    return convertView;
}

2 个答案:

答案 0 :(得分:2)

遍历listview中的子项以获取所需的自定义视图。如果View.getTag有一个持有者(因此是一个单元格),你可以检查它。

答案 1 :(得分:0)

如果您使用的是ArrayAdapter,只需使用“getItem(position)”方法即可。像:

CustomCellHolder holder = adapter.getItem(i);