我有一个从“ListView”中获取每个项目的布局的布局。
我想在我的主活动中行布局中的一个按钮做一些事情,我如何获得对它的引用findviewbyid不起作用。
我想我基本上不理解如何在自定义布局中获取对视图的引用的一般概念-除非从ListView获取视图是不同的。有人能帮上忙吗?谢谢。
发布于 2015-04-22 10:44:45
ListView是一个ViewGroup,所以你可以遍历它的子元素:
int n = getChildCount();
for (int i = 0; i < n; i++) {
doSomethingToView(getChildAt(i));
}但是,您必须小心。ListView是非常特殊的,并且只有您可能期望的子代的一个子集。它只保存(粗略地)对当前可见的子项的引用,并在它们消失时重用它们。
您可能会考虑更改底层适配器,然后通知ListView其适配器已更改,因此它需要重新绘制子适配器。或者,您可以让ListView的子级直接侦听应该更改它的事件,然后进行自我调整。
发布于 2015-04-22 10:45:05
如果在适配器的getView方法中膨胀自定义布局,则可以获得如下视图
LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.your_custom_layout, parent, false);
TextView tv = (TextView) rowView.findViewById(R.id.your_tv_id);发布于 2015-04-22 11:21:38
如果您以ViewHolder的方式实现ListView,则可以使用partial refresh principle,如下所示:
private void refreshPartially(int position){
int firstVisiblePosition = listview.getFirstVisiblePosition();
int lastVisiblePosition = listview.getLastVisiblePosition();
if(position>=firstVisiblePosition && position<=lastVisiblePosition){
View view = listview.getChildAt(position - firstVisiblePosition);
if(view.getTag() instanceof ViewHolder){
ViewHolder vh = (ViewHolder)view.getTag();
//holder.play.setBackgroundResource(resId);//Do something here.
...
}
}
}https://stackoverflow.com/questions/29786621
复制相似问题