2016-07-14 2 views
0

ich mehrere Skelett-Layouts wie dieses:umfassen Programmatically Layout in Android (Replikation der <include/> Tag

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

Ich brauche dieses Layout in einem Linearlayout wickeln, wollen aber nicht mehrere XML-Dateien, da sie machen 'd nur ein Linearlayout hat und einen Tag enthält, so ...

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

gibt es eine Möglichkeit, die gleiche Wirkung wie das @ Layout erreichen kann/Layout1 programmatisch? wie zu wählen, welche das Layout aufzunehmen? ich m dieses Layout für einen ViewHolder in einem Recyclervie aufblasen w, und gerade jetzt mache ich das.

@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); 

Es macht zwei inflate() Anrufe, die wahrscheinlich keine gute Idee ist, so dass ich bin auf der Suche nach einer Alternative zur Seite eine Reihe von XML-Dateien aus machen.

Antwort

0

könnten Sie den Schalter verwenden, das Layout dann nur ein inflater Anruf auswählen müssen danach:

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; 
Verwandte Themen