按ID查找所有视图

时间:2019-11-17 13:15:02

标签: java android layout findviewbyid

我知道这不是最佳做法,但是我有几种布局(一次只能看到一个) 所有人都使用相同的view_id。

是否有任何方法可以获取具有此ID的所有视图? 我可以迭代所有布局和layout.findViewById(),但想询问是否存在类似于CSS findViewsById() views 而不是 view

的东西。

Activity::findViewById()仅返回第一个。

3 个答案:

答案 0 :(得分:3)

不,没有类似的方法。如果存在“肮脏的骇客”,它将是不稳定的。 这里的“最佳实践”将是迭代布局,并将引用存储在数组中的这些视图上。

答案 1 :(得分:0)

您可以自己制作。在这种情况下,您必须改为使用setContentView(View)。这样您的findViewsById()就可以了,

public View[] findViewsById(int id) {
    View[] views = new View[contentViews.length];
    for(int i=0; i<contentViews.length; i++) {
        views[i] = contentViews[i].findViewById(id);
    }
    return views;
}

您的活动应如下所示,

private View[] contentViews;

@Override
public void onCreate(Bundle si) {
    super.onCreate(si);
    populateContentViews();
    setContentView(contentViews[x]);
    ...
}

答案 2 :(得分:0)

当然可以。 只需递归即可:

对于每个视图,请检查其ID,并为其子视图进行操作。

就是这样。

毕竟,这几乎是findViewById所做的。它像递归一样在视图层次结构中进行搜索,直到找到为止。