从行listview获取imageview(android)

时间:2014-07-01 20:01:58

标签: android image listview layout imageview

如何访问位于listview行内的单个imageview? 我有一个listview包含许多行自定义xml。每行包含一个imageview和一个TextView。在listview中插入这些行后,如何将imageview的位图更改为特定行?

2 个答案:

答案 0 :(得分:1)

假设您知道要更新的位置并且您在UI线程上,则可以使用

public View getViewForPosition(int position){
    int relativePos = position - listview.getFirstVisiblePosition();
    if( relativePos < 0 || relativePos > listview.getChildCount()){
        return null;
    }
    return listview.getChildAt(relativePos);
}

从此函数返回null意味着该位置在屏幕外。非null将从getView返回视图,然后您可以在其上执行findViewById以查找所需的子项。

如果从非UI线程调用,由于视图映射正在发生变化,您可以在1之前关闭。有一个黑客可以修复这个我想出来的,但我建议不要这样做。

编辑:这是线程安全黑客。

    public View getViewForPosition(int position){
        int relativePos = position - listview.getFirstVisiblePosition();
        //Hack for allowing us to get a view for a position that is currently being created
        if( (relativePos == listview.getChildCount() || relativePos == -1) && currentProcessingView != null){
            return currentProcessingView;
        }
        if( relativePos < 0 || relativePos >= listview.getChildCount()){
            return null;
        }
        return listview.getChildAt(relativePos);
    }

currentProcessingView应该在getView中设置为最开始的当前位置视图,并在getView结束时设置为null。如果该位置当前未在屏幕上,则它将返回null,您需要能够处理该位置。

答案 1 :(得分:0)

您可以唯一标记每个listview项目,然后在其上使用findViewWithTag。