0

我在我的應用程序中有一個簡單的ListView。 ListView綁定到我的ArrayAdapter類,其方法如下實現getViewAndroid - 何時將父視圖組傳遞給LayoutInflater.inflate?

class ScheduleListAdapter extends ArrayAdapter<ScheduleItem> 
{ 
    @Override public View getView(int position, View convertView, ViewGroup parent) { 

     View view = convertView; 

     if (view == null) { 
      view = _activity.getLayoutInflater().inflate(R.layout.schedule_item2, null); 
     } 

     // not shown - code initialize elements of view 

     return view; 
    } 

在上面的代碼中,注意parent的ViewGroup參數被忽略,而不是傳遞給inflate通話。我在多本書和在線示例之後對此代碼進行了建模。

但現在我已經看到了網絡上的其他例子表明,parent需要傳遞給inflate如下:

View view = inflater.inflate(R.layout.schedule_item2, parent, false); 

我試圖左右逢源,它似乎很好地工作無論哪種方式。但看看source for inflate,看起來當parent通過時,它可以影響初始化到視圖的LayoutParams。但我不確定如何解釋代碼。

當您將以上內容與使用LayoutInflater與Fragments和RecyclerView的其他在線示例進行比較時,會令人困惑。這些示例似乎總是明確地將parent參數傳遞給inflate。我假設有這種情況是有道理的。

有人可以解釋什麼時候通過ViewGroup parentinflate什麼時候不?

+1

希望這會有所幫助:https://possiblemobile.com/2013/05/layout-inflation-as-intended/ –

+0

@RohitArya - 謝謝!那個博客頁面正是我正在尋找的答案。 – selbie

回答

1

因此,沒有任何已知的父項,那麼您在XML樹的根元素上聲明的所有LayoutParams都將被丟棄。 如果沒有LayoutParams,則最終託管充氣佈局的ViewGroup將保留爲您生成默認設置。如果你是幸運的(在很多情況下你是)這些默認參數是一樣的,你在XML有什麼

0

在此基礎上documentation

的ViewGroup:可選看法是的父生成的分層結構 (如果attachToRoot爲true),或者簡單地,它提供了 組的LayoutParams值的返回的層次結構的根目錄(如果 attachToRoot是假的。)

對象

這意味着你所經歷的。

何時傳遞:指定哪一個是父級,並且此view必須附加到父級。如果未連接,將使用parent中唯一的LayoutParamss。

相關問題