2016-10-14 5 views
0

Ich versuche, ein LinearLayout als Kind zu einer anderen LinearLayout-Komponente hinzuzufügen, aber es wird überhaupt nicht auf dem Bildschirm angezeigt.LayoutInflater funktioniert nicht für Android

XML:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="horizontal" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/ReceivedMessage" 
android:background="@android:color/holo_blue_light" 
android:visibility="visible" 
tools:showIn="@layout/content_chat"> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:srcCompat="@mipmap/ic_launcher" 
    android:id="@+id/ProfilePicture" 
    android:layout_weight="1" /> 

<TextView 
    android:text=" Message" 
    android:layout_width="305dp" 
    android:layout_height="match_parent" 
    android:id="@+id/MessageText" 
    android:gravity="center_vertical" /> 
</LinearLayout> 

Code:

Button testMessageButton = (Button) findViewById(R.id.TestMessageButton); 
    testMessageButton.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View view) 
     { 
      LinearLayout msgLayout = (LinearLayout) findViewById(R.id.MessageLayout); 

      LayoutInflater vi = (LayoutInflater)getBaseContext() 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View v = vi.inflate(R.layout.message_received, msgLayout, false); 


      msgLayout.addView(v); 
     } 
    }); 

Was die Komponente auf dem Bildschirm nicht angezeigt verursacht?

+0

10 Also, was ist dieser Inflator? Warum hast du das benutzt? –

+0

Weil das übergeordnete LinearLayout ein vertikales ist und nur zum Sortieren verwendet wird. Das horizontale LinearLayout, das ich einfügen möchte, enthält ein Bild und einen Text. Ich habe den Inflator verwendet, weil Sie kein LinearLayout klonen können. – ashjack

Antwort

0

Ihre Frage ist nicht richtig, aber ich werde es auf zwei verschiedene Arten beantworten

Erstens, wenn das Linearlayout Sie hinzufügen möchten, in einer anderen XML-Datei ist, dann können Sie die XML-Datei aufblasen und fügen Sie es Eltern Linearlayout in Ihrer Aktivitätsklasse wie diese

Button testMessageButton = (Button) findViewById(R.id.TestMessageButton); 
testMessageButton.setOnClickListener(new View.OnClickListener(){ 
    public void onClick(View view){ 
     LinearLayout msgLayout = (LinearLayout) findViewById(R.id.MessageLayout); 

     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
     LayoutInflater vi = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = vi.inflate(R.layout.message_received, null); 
     v.setLayoutParams(params); 

     msgLayout.addView(v); 
    } 
}); 

ich habe meine Lösung aktualisiert. Ein Teil des Problems ist in Ihrer Layout-Datei

Dies ist die Aktivitätsklasse

import android.content.Context; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.Button; 
import android.widget.LinearLayout; 

public class MainActivity extends AppCompatActivity { 

private LinearLayout mainLayout; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mainLayout = (LinearLayout)findViewById(R.id.main_layout); 
    Button addChatButton = (Button)findViewById(R.id.add_chat); 
    addChatButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
      LayoutInflater vi = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      LinearLayout mView = (LinearLayout)vi.inflate(R.layout.test_layout, mainLayout, false); 
      mView.setLayoutParams(params); 
      mainLayout.addView(mView); 
     } 
    }); 
    } 
} 

Die XML-Layout-Datei für Aktivitätsklasse

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/main_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.inducesmile.mylinear.MainActivity"> 

<Button 
    android:id="@+id/add_chat" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="80dp" 
    android:text="@string/add_chat" 
    android:layout_gravity="center|center_horizontal"/> 
</LinearLayout> 

Schließlich ist die Layout-Datei, die das Linearlayout enthält seine aufgeblasen und zur Wurzel LinearLayout hinzufügen.

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:id="@+id/ReceivedMessage" 
android:background="@android:color/holo_blue_light" 
android:visibility="visible"> 

<ImageView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:src="@mipmap/ic_launcher" 
    android:id="@+id/ProfilePicture" 
    android:layout_weight="2" /> 

<TextView 
    android:text="@string/message" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/MessageText" 
    android:layout_weight="7" 
    android:paddingTop="14dp" 
    android:paddingBottom="14dp" 
    android:gravity="center_vertical" /> 

</LinearLayout> 

enter image description here

+0

Vielen Dank für Ihre Antwort. Mein Fall ist der erste Fall, und ich habe versucht, den Code zu verwenden, aber die Komponente wird immer noch nicht im LinearLayout angezeigt. – ashjack

+0

Hinzufügen mlinearLayout.setOrientation (LinearLayout.HORIZONTAL); und haben Sie einen Fehler in Ihrem Logcat? – Inducesmile

+0

Ich habe die Funktion hinzugefügt und immer noch kein Glück. Logcat zeigt auch keine Fehler an. – ashjack

0

basierend auf Inducesmile wenn Childs zu den übergeordneten Container Hinzufügen funktioniert, dann kann das Problem auftreten, weil der übergeordnete Container nicht innerhalb eines Scroll so alle Childs platziert Sie hinzufügen, wird nicht für Sie sichtbar Wenn Sie sicherstellen möchten, dass die bereits hinzugefügte Ansicht einfach nach dem Hinzufügen eines untergeordneten Elements die Datei parentlayout.getChildCount() aufruft, geben Sie einfach ein lineares Layout in ein anderes lineares Layout ein.

Verwandte Themen