2015-06-03 11 views
22

Ho ricevuto questo errore durante il tentativo di generare l'APK firmato. Il fatto è che la mia app è in grado di eseguire e eseguire il debug normalmente sul mio dispositivo. Non so perché quando provo a generare APK, questo errore è venuto fuori. Come ignorare questo errore e generare l'APK firmato? Sto usando Android Studio 1.2.1.1 per Mac.Come ignorare l'errore "evita costruttori non predefiniti in frammenti"?

+0

quale errore, è possibile inserire l'errore? – 3xplore

+0

Dovresti sempre lasciare vuoti i countructors dei frammenti, tutto il lavoro di initalizzazione dovrebbe essere fatto nel metodo onCreate(). – pawelo

+0

Beh, sono più interessato a ignorare l'errore. Come mai la mia app può essere eseguita normalmente senza errori durante il debug, quando si genera APK viene emesso solo questo messaggio di errore? – user2872856

risposta

77

Trovato la soluzione. Il modo più semplice è quello di aggiungere questi al Gradle:

android { 
      lintOptions { 
       checkReleaseBuilds false 
      } 
     } 

O un altro modo è quello di aggiungere @SuppressLint("ValidFragment")

+3

Non si dovrebbe avere un costruttore non predefinito in frammento. Puoi aggiungere un metodo statico, come getInstance (i tuoi argomenti ...) e creare un nuovo frammento da lì e impostare quegli argomenti sul tuo frammento – Heisenberg

+0

Guarda questo esempio: http://www.androiddesignpatterns.com/2012/05/using- newinstance-to-instantiate.html – Heisenberg

+0

Lavoro Grazie :) – InsaneCat

9

E 'nel contratto del Frammento: "Ogni frammento deve avere un costruttore vuoto, quindi può essere istanziato quando si ripristina lo stato della propria attività Si raccomanda fortemente che le sottoclassi non abbiano altri costruttori con parametri, poiché questi costruttori non essere chiamato quando il frammento viene riattivato, invece gli argomenti possono essere forniti dal chiamante con setArguments (Bundle) e successivamente recuperati dal Fragment con getArguments(). "

16

spegnere lint completamente non è una soluzione decente se si desidera continuare a utilizzare i vantaggi di esso. Se qualcuno viene in questo, trovo spegnendo l'errore specifico solo una soluzione più elegante:

android { 
    lintOptions { 
     disable 'ValidFragment' 
    } 
} 
4

Per me ha funzionato solo la combinazione delle due risposte precedenti:

android { 
    lintOptions { 
     disable 'ValidFragment' 
     checkReleaseBuilds false 
    } 
} 

Ma ricordate, questi un patch errata per evitare avvisi/errori di sfilacciamento, la soluzione è di adattare il costruttore Fragment a un frammento di costruttore statico di Fragment newInstance (params) pubblico.

Problemi correlati