2011-08-20 61 views
4

我有相同的View多次膨脹(來自XML)。當我打電話給findViewById(R.id.my_layout).setVisibility(View.GONE)時,我想將其應用於所有此類視圖。findViewById返回數組視圖

我該怎麼做?

回答

10

沒有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); 
        } 
    } 
    

如果上述選項沒有爲你工作,請你爲什麼這樣做闡述。

+0

如果我只適用於一個,我該如何識別? – Taranfx

+1

我不明白。如果你想唯一標識一個'View',你需要給它一個唯一的ID,或者使用'View.setTag()'方法來存儲具有'View'的自定義數據。 –

1

View進行修改,其中包含充氣佈局。

E.g:

如果你有

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

更改知名度到了這一觀點。 v.setVisibility(View.GONE);