2012-06-14 6 views
27

Ich habe eine Klasse View1, die View erweitert. Ich möchte R.layout.test2.xml in dieser Klasse View1 aufblasen. Ich habe in dieser Klasse einen folgenden Code setzteAufblasen eines XML-Layouts in einer benutzerdefinierten Ansichtsklasse

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

Aus einer anderen Klasse Home ich diese aufgeblasene Ansicht will für einige Umstände, dort zu sein, in der Home Klasse I den folgenden Code geschrieben:

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

Aber Wenn ich mein Projekt leite, zeigt mir die Aktivität nichts.

Antwort

45

Sie können nicht hinzufügen Blick auf die View Klasse stattdessen sollten Sie ViewGroup oder einer ihrer Unterklassen verwenden (wie Linearlayout, RelativeLayout usw.). Dann wird der Code wie folgt sein:

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

Auch die Zeile:

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

nichts zu der aktuellen Ansicht hinzufügen (wegen der false Parameter), es bläht nur View von a XML-Layout

+1

Thnks es funktioniert !! :) – LuminiousAndroid

+0

Können Sie uns sagen, warum wir nichts gaben, indem Sie View erweitern. – LuminiousAndroid

+1

@ Kabir121 Die 'View' Klasse unterstützt nicht das Hinzufügen anderer Ansichten, die' View' Klasse repräsentiert eine einzelne einzelne 'View' (wie wenn Sie einen runden' Button' erstellen möchten) und keine Gruppe (wie in Ihrem Fall, wenn Sie diese Layoutdatei aufblasen). – Luksprog

9

verwenden

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

Sie müssen this verwenden, nicht null, und ändern Sie den false Parameter (boolean AttachToRoot) zu true

+7

Um dies zu tun, müssen Sie Unterklasse von ViewGroup, nicht View – spookypeanut

3

Verwenden Sie den Code unten Ihr Layout aufzublasen, dann können Sie verwenden diese Ansicht für jeden Zweck. Dadurch erhalten Sie das übergeordnete Layout Ihrer XML-Datei. Tippe den Cast und verwende ihn entsprechend.

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

, wenn ich eine Listenansicht in meiner Klasse View1 dann onlistitem klicken Ich versuche, neue Ansicht aufzublasen, aber es ist nicht aufblasen neue Ansicht .. Bitte helfen Sie jemandem – LuminiousAndroid

+0

Wo Ist Ihr Listenelement, klicken Sie in den benutzerdefinierten Adapter oder in Aktivität. –

1

Sie fügen in Home-Aktivität leere Ansicht hinzu. In der View1-Klasse haben Sie nur die Ansicht "Aufblasen", aber nicht "Hinzufügen".

0

Sie haben eine ViewGroup wie FrameLayout zu verwenden und zu tun:

public class View1 extends FrameLayout { 

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

Im Layout XML, verwenden Sie die <merge Tag nicht nur Ihre view1 Layout in das Stammlayout hinzuzufügen, die bedeutet, dass wir eine leere FrameLayout und Ihre definierte Ansicht nebeneinander.

<?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> 

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

Verwandte Themen