Meine App stürzt bei der Verwendung von addView ()

Im ein Noob bei Android. Meine App hält immer zusammen, wenn ich die ViewGroup-AddView () -Methode verwende, aber funktioniert, wenn ich die Activity AddContentView () – Methode verwende.

Der Grund, warum ich addView () anstelle von addContentView () verwenden möchte, ist, dass ich die Layouts entfernen kann, wenn nicht benötigt, was mit addContentView () nicht möglich ist.

Code: MainActivity.java

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //CAMERA VIEW setContentView(R.layout.activity_main); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); surfaceView = (SurfaceView)findViewById(R.id.surfaceview); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); ViewGroup rootView = (ViewGroup) findViewById(R.layout.activity_main); LayoutInflater mLayoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); //GRAPHICS VIEW glSurfaceView = new GLSurfaceView(this); glSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); glSurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); glSurfaceView.setRenderer(new GLRenderer()); //crash //rootView.addView(glSurfaceView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); //not crash addContentView(glSurfaceView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); glSurfaceView.setZOrderMediaOverlay(true); //CONTROLS VIEW View ctrlLayout = mLayoutInflater.inflate(R.layout.activity_controls, rootView); //crash //rootView.addView(ctrlLayout, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); //not crash addContentView(ctrlLayout, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); ctrlLayout.bringToFront(); textView = (TextView)ctrlLayout.findViewById(R.id.text); rtTextView = (TextView)ctrlLayout.findViewById(R.id.rt_text); btnStart = (Button)ctrlLayout.findViewById(R.id.button1); } 

Activity_main.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".MainActivity" > <SurfaceView android:id="@+id/surfaceview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </RelativeLayout> 

Activity_controls.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="14dp" android:text="@string/hello_world" /> <TextView android:id="@+id/rt_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="18dp" android:layout_marginTop="14dp" android:text="@string/str_rttext" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/rt_text" android:layout_centerHorizontal="true" android:text="@string/str_title" android:textAppearance="?android:attr/textAppearanceLarge" /> <Button android:id="@+id/button1" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/btn_start" /> </RelativeLayout> 

BEARBEITEN:

Ich habe meinen Code geändert, wie von FD_ vorgeschlagen

ViewGroup rootView = mLayoutInflater.inflate (R.layout.activity_main, null); Jetzt, wenn ich setContentView (rootView) am Ende der onCreate-Funktion aufrufe, stürzt es ab.

Hier ist der Logcat:

 02-16 08:00:28.142: I/dalvikvm(2153): threadid=1: stack overflow on call to Landroid/view/View;.isLayoutDirectionInherited:Z 02-16 08:00:28.142: I/dalvikvm(2153): method requires 12+20+4=36 bytes, fp is 0xb02fe320 (32 left) 02-16 08:00:28.152: I/dalvikvm(2153): expanding stack end (0xb02fe300 to 0xb02fe000) 02-16 08:00:28.152: I/dalvikvm(2153): Shrank stack (to 0xb02fe300, curFrame is 0xb0303ec4) 02-16 08:00:28.152: D/AndroidRuntime(2153): Shutting down VM 02-16 08:00:28.152: W/dalvikvm(2153): threadid=1: thread exiting with uncaught exception (group=0xb1aeab90) 02-16 08:00:28.932: D/dalvikvm(2153): GC_FOR_ALLOC freed 117K, 6% free 3266K/3448K, paused 80ms, total 86ms 02-16 08:00:29.382: D/dalvikvm(2153): GC_FOR_ALLOC freed 356K, 11% free 3423K/3844K, paused 46ms, total 47ms 02-16 08:00:29.402: E/AndroidRuntime(2153): FATAL EXCEPTION: main 02-16 08:00:29.402: E/AndroidRuntime(2153): Process: com.example.previewcamera, PID: 2153 02-16 08:00:29.402: E/AndroidRuntime(2153): java.lang.StackOverflowError 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5713) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetResolvedLayoutDirection(ViewGroup.java:5714) 02-16 08:00:29.402: E/AndroidRuntime(2153): at android.view.ViewGroup.resetRes 02-16 08:00:29.632: D/dalvikvm(2153): GC_FOR_ALLOC freed 548K, 16% free 3386K/4000K, paused 54ms, total 55ms 

3 Solutions collect form web for “Meine App stürzt bei der Verwendung von addView ()”

Sie müssen setContentView() anrufen, bevor Sie findViewById() in Ihrer Activity . Darüber hinaus gibt findViewById() Ansichten zurück, die in der Inhaltsansicht enthalten sind und durch den ID- Wert identifiziert werden, der als Argument übergeben wird. findViewById() wird das findViewById() niemals funktionieren.

Eine weitere Möglichkeit ist, die Sicht selbst aufzublasen, mit LayoutInflater :

 LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); ViewGroup rootView = inflater.inflate(R.layout.main, null); 

Für andere, die am Ende hier versuchen, um zu verfolgen, dass Fehler mit benutzerdefinierten Ansichten, doppelte überprüfen, dass Sie richtig aufblasen. Die folgende Änderung löste meine Fragen.

Fehler:

 View view = inflate(getContext(), R.layout.foo, this); addView(view); 

Funktioniert gut:

 View view = inflate(getContext(), R.layout.foo, null); addView(view); 

Ich hatte das gleiche Problem bei der Verwendung von attachToRoot = true

 final View submitButton = LayoutInflater.from(this).inflate (R.layout.view_button_simple, rootView, true); 

Ich musste es ändern

 final View submitButton = LayoutInflater.from(this).inflate (R.layout.view_button_simple, rootView, false); 
  • Android machen benutzerdefinierte Layout Form
  • Unterschied zwischen Ansicht und ViewGroup in Android
  • Aufblasen des XML-Layouts in eine benutzerdefinierte ViewGroup
  • NullPointerException: Versuchen Sie, aus dem Feld 'int android.view.View.mViewFlags' zu lesen.
  • Android ViewGroup Crash: Versuchen Sie, aus dem Feld 'int android.view.View.mViewFlags' auf eine Nullobjektreferenz zu lesen
  • So erstellen Sie benutzerdefinierte Viewgroup in Android mit Beispiel
  • Zusammenführen von ImageView zu einem einzigen Bitmap-Bild (Android)
  • RemoveView funktioniert nicht nach LayoutInflater.inflate (Ressource, root, true)
  • Android auf Sicht aus dem Elternteil entfernt
  • Custom Relative Layout Skalierung?
  • Programmisch fügen Sie Fragmente zur Viewgroup hinzu
  • Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.