findViewById返回视图数组

时间:2011-08-20 01:42:59

标签: android

我有多次View膨胀(来自XML)。当我致电findViewById(R.id.my_layout).setVisibility(View.GONE)时,我想将其应用于所有此类观点。

我该怎么做?

2 个答案:

答案 0 :(得分:11)

没有findViewById()版本可以返回所有匹配项;它只返回第一个。您有几个选择:

  1. 给他们不同的ID,以便你可以找到它们。
  2. 当您对它们进行充气时,请将引用存储在ArrayList中,如下所示:

    ArrayList<View> mViews = new ArrayList<View>();
    

    然后当你膨胀时:

    LayoutInflater inflater = getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mViews.add(inflater.inflate(R.layout.your_layout, root));
    

    然后当你想隐藏它们时:

    for (View v : mViews) { v.setVisibility(View.GONE); }
    
  3. 根据您对这些视图的操作,父布局可能有一种访问方式。例如,如果你将它们放在ListView或其他类似物中。如果您知道父元素,则可以遍历子元素:

    ViewGroup parent = getParentSomehow();
    for (int i = 0; i < parent.getChildCount(); ++i) {
        View v = parent.getChildAt(i);
        if (v.getId() == R.id.my_layout) {
            v.setVisibility(View.GONE);
        }
    }
    
  4. 如果以上选项对您不起作用,请详细说明您为何这样做。

答案 1 :(得分:1)

修改包含虚增布局的View

E.g:

如果你有

View v = inflater.inflate(.... );

您可以在此视图中更改可见性。 v.setVisibility(View.GONE);