2012-03-06 20 views
31

Sto cercando di usare un frammento in un FragmentActivity in questo modo:FragmentActivity: non può lanciare da Frammento di classe derivata

TutViewerFragment viewer = (TutViewerFragment)  
getSupportFragmentManager().findFragmentById(R.id.tutview_fragment); 

E il mio TutViewerFragment estende Fragment. Tuttavia sto ricevendo un errore:

Cannot cast from Fragment to TutViewerFragment.

Realmente non capisco perché questo sta accadendo. Perché non può essere lanciato?

+1

sei sicuro che TutViewerFragment stia estendendo Fragment? –

+0

Sono positivo. Dai un'occhiata: http://pastie.org/3534066 –

+0

Puoi incollare il tuo elemento xml ? Anche quale pacchetto di compatibilità stai usando? – Sid

risposta

70

Si sta estendendo la classe Fragment errata. Importa android.support.v4.app.Fragment anziché android.app.Fragment.

+13

Oppure chiamare 'getFragmentManager' anziché' getSupportFragmentManager'. – theblang

+0

Grazie a @mattblang potresti per favore approfondire la differenza. – Mayank

+0

'getFragmentManager' restituisce un frammento nativo, mentre' getSupportFragmentManager' restituisce un frammento di supporto. 'getSupportFragmentManager' è parte di/aggiunto dalla libreria di supporto perché non possono modificare il tipo di ritorno del metodo esistente. – devconsole

6

Come devconsole sottolineato nel commento sopra: La classe che si estende Frammento deve importare

android.support.v4.app.Fragment; 

e non

android.app.Fragment; 

Credo che abbia a che fare con Android Compatibility Package . Il problema è ora risolto!

3

Come devconsole/igor specificato, è necessario assicurarsi che la classe Fragment utilizzata in entrambe le classi sia la stessa. cioè andorid.app.Fragment sia

public class WorkoutDetailFragment extends Fragment 

e nella classe di attività in cui si cerca di ottenere di riferimento del frammento.

WorkoutDetailFragment workoutDetailFragment = (WorkoutDetailFragment)getFragmentManager().findFragmentById(R.id.detail_frag); 

Garantire la stessa classe di frammento in entrambi i file risolverà l'eccezione del cast di classe.

Spero che questo aiuti. So che è un po 'in ritardo. Sono nuovo di Android e ad esplorare le sfumature della meravigliosa lingua. Grazie a StackOverflow per avermi aiutato a risolvere questi problemi minori.

Problemi correlati