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); 
  • ViewGroup beenden das Ereignis
  • Wie bekomme ich einen Blick nach vorne ohne Aufruf bringToFront ()?
  • Stackoverflow-Fehler auf View Drag Drop Update
  • RemoveView funktioniert nicht nach LayoutInflater.inflate (Ressource, root, true)
  • Android StackOverflowError in ViewGroup.resetResolvedTextDirection beim Hinzufügen von ListView zu LinearLayout
  • Warum für Constraints Layout gehen, da wir bereits Relatives Layout haben?
  • Android machen benutzerdefinierte Layout Form
  • Ansichten innerhalb einer benutzerdefinierten ViewGroup werden nicht angezeigt
  • Android: mit MotionEvent zu tun Drag & Drop Positionierung von Views in einer benutzerdefinierten ViewGroup
  • Benutzerdefinierte ViewGroup-Fokusbehandlung
  • Wie handle ich mit Klick in die untergeordneten Ansichten und berühre die übergeordneten ViewGroups?
  • Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.