J'ai une application de test qui a ses questions stockées dans une base de données. My FragmentActivity contient un fragment, qui est remplacé lors de la sélection d'une nouvelle question à partir de l'AppBar. Lorsque je sélectionne une nouvelle question environ 30 fois, FragmentActivity se ferme de façon inattendue et me ramène à l'activité précédente qui était de retour dans la pile.après avoir appelé environ 30 fois fragmentTransaction.replace() le FragmentActivity se ferme de manière inattendue
Sur mon Logcat au niveau Verbose, je ne vois rien de lié avec mon Application pourquoi c'est arrivé.
Mon code xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/buttonshape"
android:orientation="horizontal">
<HorizontalScrollView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1">
<LinearLayout
android:id="@+id/linearLayoutAppbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
</LinearLayout>
</HorizontalScrollView>
<ImageView
android:layout_width="50dp"
android:layout_height="match_parent"
android:src="@drawable/s202_background" />
</LinearLayout>
Le RelativeLayout est toujours être remplacé par un fragment lors de l'appel fragmentTransaction.replace(); Dans le LinearLayout ci-dessous est mon AppBar qui a des boutons créés par programme représentant chaque question dans la base de données. Lorsqu'un bouton est cliqué, OnClickListener est appelé et identifie le bouton qui est cliqué puis, dans une nouvelle méthode, appelle fragmentTransaction.replace(); Voici le code de cette méthode:
private void question1() {
testPrasanjaCursor = BazaNaPrasanja.testDatabase.query(VozackaDbContract.TABLE_NAME_TABELA_TEST, null, null, null, null, null, null);
fragmentTransaction = fragmentManager.beginTransaction();
testPrasanjaCursor.moveToPosition(0);
fragmentTransaction.replace(R.id.fragment_container, fragmentZnaci4);
fragmentTransaction.commit();
testPrasanjaCursor.close();
}
Je ne sais pas si la base de données SQLite est à l'origine ou la FragmentManager parce que je ne dispose d'aucune information concernant mon appliaction dans le verbeux.
EDIT: Logcat ajouté, voici tous les logcat depuis que je cliquez sur Exécuter Emulator jusqu'à ce qu'il ferme la FragmentActivity:
12-11 13:33:48.802 1722-1722/? I/art: Not late-enabling -Xcheck:jni (already on)
12-11 13:33:48.803 1722-1722/? W/art: Unexpected CPU variant for X86 using defaults: x86_64
12-11 13:33:48.906 1722-1722/mojavozacka.testovi_za_vozacka_dozvola W/System: ClassLoader referenced unknown path: /data/app/mojavozacka.testovi_za_vozacka_dozvola-2/lib/x86_64
12-11 13:33:48.918 1722-1722/mojavozacka.testovi_za_vozacka_dozvola I/InstantRun: Instant Run Runtime started. Android package is mojavozacka.testovi_za_vozacka_dozvola, real application class is null.
12-11 13:33:49.203 1722-1722/mojavozacka.testovi_za_vozacka_dozvola W/System: ClassLoader referenced unknown path: /data/app/mojavozacka.testovi_za_vozacka_dozvola-2/lib/x86_64
12-11 13:33:49.353 1722-1722/mojavozacka.testovi_za_vozacka_dozvola W/art: Verification of java.lang.Object mojavozacka.testovi_za_vozacka_dozvola.PocetnaActivity.access$super(mojavozacka.testovi_za_vozacka_dozvola.PocetnaActivity, java.lang.String, java.lang.Object[]) took 110.107ms
12-11 13:33:49.605 1722-1729/mojavozacka.testovi_za_vozacka_dozvola W/art: Suspending all threads took: 53.041ms
12-11 13:33:49.966 1722-1752/mojavozacka.testovi_za_vozacka_dozvola D/NetworkSecurityConfig: No Network Security Config specified, using platform default
12-11 13:33:50.168 1722-1722/mojavozacka.testovi_za_vozacka_dozvola I/SQLiteAssetHelper: successfully opened database vozacka.db
12-11 13:33:50.170 1722-1722/mojavozacka.testovi_za_vozacka_dozvola I/SQLiteAssetHelper: successfully opened database test.db
12-11 13:33:50.177 1722-1734/mojavozacka.testovi_za_vozacka_dozvola I/art: Background sticky concurrent mark sweep GC freed 10882(1917KB) AllocSpace objects, 11(220KB) LOS objects, 0% free, 45MB/45MB, paused 4.735ms total 215.229ms
12-11 13:33:50.319 1722-1778/mojavozacka.testovi_za_vozacka_dozvola I/OpenGLRenderer: Initialized EGL, version 1.4
12-11 13:33:50.319 1722-1778/mojavozacka.testovi_za_vozacka_dozvola D/OpenGLRenderer: Swap behavior 1
12-11 13:33:50.337 1722-1778/mojavozacka.testovi_za_vozacka_dozvola E/EGL_emulation: tid 1778: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
12-11 13:33:50.337 1722-1778/mojavozacka.testovi_za_vozacka_dozvola W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x7d21b2f6f780, error=EGL_BAD_MATCH
12-11 13:33:50.415 1722-1734/mojavozacka.testovi_za_vozacka_dozvola I/art: Background partial concurrent mark sweep GC freed 10885(956KB) AllocSpace objects, 6(120KB) LOS objects, 8% free, 44MB/48MB, paused 19.305ms total 217.880ms
12-11 13:33:53.844 1722-1722/mojavozacka.testovi_za_vozacka_dozvola I/SQLiteAssetHelper: successfully opened database vozacka.db
12-11 13:33:53.858 1722-1722/mojavozacka.testovi_za_vozacka_dozvola I/SQLiteAssetHelper: successfully opened database test.db
12-11 13:33:53.866 1722-1734/mojavozacka.testovi_za_vozacka_dozvola W/art: Suspending all threads took: 7.410ms
12-11 13:33:53.962 1722-1778/mojavozacka.testovi_za_vozacka_dozvola E/EGL_emulation: tid 1778: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
12-11 13:33:53.962 1722-1778/mojavozacka.testovi_za_vozacka_dozvola W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x7d21b2f6f040, error=EGL_BAD_MATCH
12-11 13:33:55.979 1722-1729/mojavozacka.testovi_za_vozacka_dozvola W/art: Suspending all threads took: 15.611ms
12-11 13:33:56.304 1722-1778/mojavozacka.testovi_za_vozacka_dozvola E/EGL_emulation: tid 1778: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
12-11 13:33:56.304 1722-1778/mojavozacka.testovi_za_vozacka_dozvola W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x7d21b2f6f780, error=EGL_BAD_MATCH
12-11 13:33:58.573 1722-1722/mojavozacka.testovi_za_vozacka_dozvola W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
12-11 13:34:00.499 1722-1729/mojavozacka.testovi_za_vozacka_dozvola W/art: Suspending all threads took: 8.897ms
12-11 13:34:01.755 1722-1734/mojavozacka.testovi_za_vozacka_dozvola I/art: WaitForGcToComplete blocked for 5.076ms for cause Background
12-11 13:34:05.741 1722-1778/mojavozacka.testovi_za_vozacka_dozvola E/EGL_emulation: tid 1778: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
12-11 13:34:05.741 1722-1778/mojavozacka.testovi_za_vozacka_dozvola W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x7d21b2f6f040, error=EGL_BAD_MATCH
12-11 13:34:08.083 1722-1722/mojavozacka.testovi_za_vozacka_dozvola W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
vous voulez dire mon LinearLayout principal qui a l'id de "layoutMain" non? –
oui, la mise en page que vous voulez changer son contenu avec une autre question –
bien la mise en page qui chante son contenu sur une question est sélectionnée est le RelativeLayot avec l'ID "fragment_container", je remplace sa mise en page avec un autre fragment lorsque je clique sur un bouton. Je vais essayer votre réponse et vous dire si cela fonctionne. –