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