2016-10-03 7 views
2

das folgende Beispiel-Layout mit einer benutzerdefinierten Ansicht "RowWrapperView" Gegeben:Benutzerdefinierte Ansicht seines Inhalts in einer bestimmten Kind Ansicht Einwickeln

(row_item.xml)

<?xml version="1.0" encoding="utf-8"?> 
<com.example.android.RowWrapperView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    ... > 
    <Button android:id="@+id/btn1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
    <Button android:id="@+id/btn2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
    <Button android:id="@+id/btn3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
</com.example.android.RowWrapperView> 

Der Blick hat ein aufgeblasenes Layout (view_row_wrapper .xml) mit einem Linearlayout mit der ID "R.id.container":

public class RowWrapperView extends RelativeLayout { 
    public RowWrapperView(Context context) { 
     super(context); 
     init(); 
    } 
    public RowWrapperView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 
    public RowWrapperView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    public LinearLayout container; 
    private void init() { 
     inflate(getContext(), R.layout.view_row_wrapper, this); 
     container = (LinearLayout) findViewById(R.id.container); 
    } 
} 

(view_row_wrapper.xml)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    ... > 
    <LinearLayout 
     android:id="@+id/something" 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 
     <Button android:id="@+id/test" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
     ... 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/container" 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 
     <!-- Trying to get the content of the view here --> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/something_else" 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 
     ... 
     <TextView 
      android:id="@+id/message_sender" 
      tools:text="Jon Snow" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
</LinearLayout> 

Was ich versuche ist, den Inhalt von "RowWrapperView" (of row_item.xml) in R.id.container zu bekommen.

Fehle ich etwas?

Antwort

0

Inflater hat Rückgabetyp - Ansicht, diese Ansicht, die Sie dann zu Ihrem Layout hinzufügen müssen, suchen sie diese versuchen, ohne Ansicht Hinzufügen

private void init() { 
    View view = inflate(getContext(), R.layout.view_row_wrapper, this); 
    container = (LinearLayout) view.findViewById(R.id.container); 
} 

oder das Layout mit dem Hinzufügen zu Layout

private void init() { 
    View view = inflate(getContext(), R.layout.view_row_wrapper, this); 
    addView(view); 
    container = (LinearLayout) findViewById(R.id.container); 
} 
+0

Dies wird das Layout R.layout.view_row_wrapper in der benutzerdefinierten Ansicht korrekt aufblasen. Aber wie bekomme ich den Inhalt des Tags RowWrapperView (in row_item.xml) im R.id.container? – Daniel

0

Ich denke, dass Sie dies tun könnten:

for (int i=0 ; i<getChildCount() ; i++) { 
      container.add(getChildAt(i)); 
     } 

für alle Elemente hinzufügen enthalten er.

+0

Sie meinen in der init()? – Daniel

+0

Ja, weil Sie auf diese Weise die Elemente auf container statt der aktuellen Ansicht setzen. – alextfos

Verwandte Themen