首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android -如何在自定义布局中获取视图的引用?

Android -如何在自定义布局中获取视图的引用?
EN

Stack Overflow用户
提问于 2015-04-22 10:22:51
回答 4查看 1.3K关注 0票数 0

我有一个从“ListView”中获取每个项目的布局的布局。

我想在我的主活动中行布局中的一个按钮做一些事情,我如何获得对它的引用findviewbyid不起作用。

我想我基本上不理解如何在自定义布局中获取对视图的引用的一般概念-除非从ListView获取视图是不同的。有人能帮上忙吗?谢谢。

EN

回答 4

Stack Overflow用户

发布于 2015-04-22 10:44:45

ListView是一个ViewGroup,所以你可以遍历它的子元素:

代码语言:javascript
运行
复制
int n = getChildCount();
for (int i = 0; i < n; i++) {
    doSomethingToView(getChildAt(i));
}

但是,您必须小心。ListView是非常特殊的,并且只有您可能期望的子代的一个子集。它只保存(粗略地)对当前可见的子项的引用,并在它们消失时重用它们。

您可能会考虑更改底层适配器,然后通知ListView其适配器已更改,因此它需要重新绘制子适配器。或者,您可以让ListView的子级直接侦听应该更改它的事件,然后进行自我调整。

票数 1
EN

Stack Overflow用户

发布于 2015-04-22 10:45:05

如果在适配器的getView方法中膨胀自定义布局,则可以获得如下视图

代码语言:javascript
运行
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2015-04-22 11:21:38

如果您以ViewHolder的方式实现ListView,则可以使用partial refresh principle,如下所示:

代码语言:javascript
运行
复制
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.
            ...
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29786621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档