2012-03-06 12 views
31

Estoy tratando de utilizar un fragmento de una FragmentActivity así:FragmentActivity: No se puede emitir a partir del fragmento de clase derivada

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

Y mi TutViewerFragment se extiende Fragment. Sin embargo, estoy recibiendo un error:

Cannot cast from Fragment to TutViewerFragment.

Realmente no entiendo por qué sucede esto. ¿Por qué no se puede lanzar?

+1

¿Estás seguro de que TutViewerFragment está extendiendo Fragment? –

+0

Soy positivo. Eche un vistazo: http://pastie.org/3534066 –

+0

¿Puede pegar su elemento xml ? Además, ¿qué paquete de compatibilidad estás usando? – Sid

Respuesta

70

Está extendiendo la clase Fragment incorrecta. Importe android.support.v4.app.Fragment en lugar de android.app.Fragment.

+13

O llamando a 'getFragmentManager' en lugar de' getSupportFragmentManager'. – theblang

+0

Gracias @mattblang ¿podría explicar la diferencia también? – Mayank

+0

'getFragmentManager' devuelve un Fragmento nativo, mientras que' getSupportFragmentManager' devuelve un Fragmento de soporte. 'getSupportFragmentManager' es parte de/agregado por la biblioteca de soporte porque no pueden cambiar el tipo de retorno del método existente. – devconsole

6

Como devconsole señaló en el comentario anterior: La clase que se extiende Fragmento necesita importar

android.support.v4.app.Fragment; 

y no

android.app.Fragment; 

supongo que tiene que ver con el paquete de compatibilidad de Android . ¡El problema ahora está resuelto!

3

Como devconsole/igor especificado, debemos asegurarnos de que la clase Fragment utilizada en ambas clases sea la misma. es decir, tanto en andorid.app.Fragment

public class WorkoutDetailFragment extends Fragment 

y en la clase de actividad en la que tratamos de obtener la referencia del fragmento.

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

Garantizar la misma clase de Fragmento en ambos archivos resolverá la excepción de clase emitida.

Espero que esto ayude. Sé que es un poco tarde. Soy nuevo en Android y exploro los matices del maravilloso lenguaje. Gracias a Stackoverflow por ayudarme a resolver estos problemas menores.

Cuestiones relacionadas