2015-02-22 16 views
5

Ho appena avuto un rapporto incidente da uno degli utenti con la seguente traccia di errore:rendere esiste che il nome della classe, è pubblico, e ha una costruzione vuota frammento pubblico con il nome della classe e il costruttore vuoto

Unable to instantiate fragment packageName.Wizard$WizardFirstPage: make sure class name exists, is public, and has an empty constructor that is public 

Queste le dichiarazioni classi:

public class Wizard extends Other

public abstract class Other extends BaseActivity

public abstract class BaseActivity extends ActionBarActivity

Tutte le classi sono pubbliche, denominate e non hanno un costruttore definito dall'utente.

Per quanto riguarda il frammento WizardFirstPage: (definito in Wizard)

public class WizardFirstPage extends Fragment

Nessun costruttore definito dall'utente sia.

Cosa mi manca?

+3

aggiungere la parola chiave statica. 'public static class WizardFirstPage estende Fragment', corregge tutti gli errori di compilazione e lo riavvia – Blackbelt

+1

@Blackbelt, tutti i frammenti interni dovrebbero essere statici? (è un errore di runtime BTW) – SagiLow

+1

sì, devono essere dichiarati come statici – Blackbelt

risposta

9
public class WizardFirstPage extends Fragment 

Questa è una classe interna di packageName.Wizard. Che funzionerà solo se la classe è dichiarata come static, come indicato da Blackbelt:

public static class WizardFirstPage extends Fragment 

Quando l'attività Wizard subisce un cambiamento di configurazione, o viene ricreato dopo la cessazione processo, Android sta per cercare di creare un istanza di Wizard$WizardFirstPage. Con il tuo attuale approccio, Android non può farlo, poiché solo le istanze di Wizard possono creare istanze di Wizard$WizardFirstPage. La modifica di WizardFirstPage in static risolverà questo problema.

+0

abbastanza giusto .. grazie a tutti e due. – SagiLow

+0

spiegazione abbastanza pulito. Per me questa classe interna è un adattatore che chiama un altro frammento da caricare in ViewPager. Vediamo se funziona! – sud007

Problemi correlati