2016-07-14 2 views
0

У меня есть несколько макетов скелета, как это:Программных включают макет в Android (тиражирование <include/> тега

<?xml version="1.0" encoding="utf-8"?> 
<merge xmlns:android="http://schemas.android.com/apk/res/android" 
     ... 
</merge> 

мне нужно обернуть этот макет в LinearLayout, но не хочу, чтобы сделать несколько файлов XML, так как они 'D просто есть LinearLayout и включают тег, как это ...

<LinearLayout  
    <include layout="@layout/layout1" 
</LinearLayout> 

есть ли способ, что я могу достичь того же эффекта, что и @ макет/Layout1 программно? как выбрать макет включить? Я m раздувать этот макет для ViewHolder в режиме recyclervie w, и сейчас я это делаю.

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    ViewHolder vh = null; 
    View inflatedView; 
    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 

    switch (x) { 
     case 1: 
      inflatedView = inflater.inflate(R.layout.cool_layout, parent, false); 
      inflater.inflate(R.layout.layout1, (LinearLayout)inflatedView, true); 
      vh = new ViewHolder(inflatedView); 
     case 2: 
      inflatedView = inflater.inflate(R.layout.cool_layout, parent, false); 
      inflater.inflate(R.layout.layout2, (LinearLayout)inflatedView, true); 
      vh = new ViewHolder(inflatedView); 

Это делает два Inflate() вызывает, которые, вероятно, не является хорошей идеей, поэтому я ищу альтернативу в стороне от создания кучу XML-файлов.

ответ

0

Вы можете использовать переключатель, чтобы выбрать расположение, то есть только один Inflater звонок позже:

int layout = 0; 

    switch(mLayoutType){ 
     case "layout_1":{ 
      layout = R.layout.layout_1; 
      break; 
     } 
     case "layout_2":{ 
      layout = R.layout.layout_2; 
      break; 
     } 
     default:{ 
      Log.e(LOG_TAG,"Invalid layout type."); 
     } 
    } 

    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(layout, parent, false); 

    ViewHolder vh = new ViewHolder(v); 
    return vh;