2012-06-14 13 views
27

Ho una classe View1 che si estende View. Voglio gonfiare R.layout.test2.xml in questa classe View1. Ho messo un codice seguente in questa classeGonfiare un layout xml in una classe di visualizzazione personalizzata

public class View1 extends View { 

    View view; 
    String[] countries = new String[] {"India", "USA", "Canada"}; 

    public View1(Context context) { 
     super(context); 
     LayoutInflater mInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view=mInflater.inflate(R.layout.test2, null, false); 
    } 
} 

da un'altra classe Home voglio questo punto di vista gonfiato per essere lì per alcune circostanze, Nella classe Home ho scritto il seguente codice:

public class Home extends Activity{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home); 
     CreateView(); 
    } 

    public void CreateView() { 
     LinearLayout lv=(LinearLayout)findViewById(R.id.linearlayout); 
     View1 view = new View1(Home.this); 
     lv.addView(view); 
    } 
} 

Ma mentre gestisco il mio progetto, l'attività non mi mostra nulla.

risposta

45

Non è possibile aggiungere viste alla classe View anziché utilizzare ViewGroup o una delle sue sottoclassi (come Linearlayout, RelativeLayout ecc.). Allora il vostro codice sarà simile a questo:

public class View1 extends LinearLayout { 

    View view; 
    String[] countries = new String[] {"India", "USA", "Canada"}; 

    public View1(Context context) { 
     super(context); 
     LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     mInflater.inflate(R.layout.test2, this, true);}} 

Anche la linea:

mInflater.inflate(R.layout.test2, null, false) 

non aggiunge nulla alla vista corrente (a causa del parametro false), si gonfia solo un View da un layout xml.

+1

Thnks funziona !! :) – LuminiousAndroid

+0

Puoi dire perché non stiamo dando nulla estendendo View. – LuminiousAndroid

+1

@ Kabir121 La classe 'View' non supporta l'aggiunta di altre viste ad esso, la classe' View' rappresenta una singola singola 'View' (come, se si vuole costruire un' Button' arrotondato) e non un gruppo (come nel tuo caso quando si gonfia il file di layout). – Luksprog

9

Utilizzare questa

LayoutInflater li = (LayoutInflater)getContext().getSystemService(infService); 
    li.inflate(R.layout.test2, **this**, true); 

È necessario utilizzare this, non nullo, e modificare il parametro false (AttachToRoot booleana) per true

+7

Per fare ciò, è necessario sottoclasse da ViewGroup, non Visualizza – spookypeanut

3

Utilizza il codice qui sotto per gonfiare il layout, quindi è possibile utilizzare quella vista per qualsiasi scopo. Questo ti darà il layout più genitore del tuo file XML. Scrivi il cast e usalo di conseguenza.

View headerView = View.inflate(this, R.layout.layout_name, null); 
+0

se ho una vista elenco nella mia classe View1, quindi onlistitem clic sto cercando di gonfiare la nuova vista ma non si sta gonfiando nuova vista .. Si prega di aiutare qualcuno – LuminiousAndroid

+0

Dove l'elemento della tua lista fa clic su adattatore personalizzato o in attività. –

1

Si sta aggiungendo nella visualizzazione vuota attività casa. Perché nella classe View1 hai solo ingrandito la vista ma non aggiungi nulla.

0

è necessario utilizzare un ViewGroup come FrameLayout e fare:

public class View1 extends FrameLayout { 

    public View1(Context context) { 
     super(context); 
     inflate(context, R.layout.view1, this); 
    } 
} 

Nel XML layout, utilizzare il tag <merge non solo di aggiungere il layout view1 al layout radice che significa che abbiamo un vuoto FrameLayout e la tua vista definita l'una accanto all'altra.

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

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="content" /> 

</merge> 

Vedi http://trickyandroid.com/protip-inflating-layout-for-your-custom-view/