java android android-fragments android-viewpager android-4.0

java - No se puede convertir de android.support.v4.app.Fragment a android.app.Fragment



android-fragments android-viewpager (8)

¿Que está pasando aqui?

Si bien el paquete de soporte de Android le ofrece una implementación de Fragment compatible con versiones anteriores, ActionBar no es parte del paquete de soporte de Android. Por lo tanto, ActionBar.TabListener espera objetos de Fragment API nativos de nivel 11. Considere usar ActionBarSherlock para tener una barra de acciones y fragmentos de soporte de Android.

pero luego me queda otro problema en mi FragmentPagerAdapter

El FragmentPagerAdapter en el paquete de soporte de Android es un poco complicado: quiere objetos Fragment API Nivel 11, no objetos Fragment soporte de Android. Sin embargo, puede clonar la fuente en FragmentPagerAdapter (la fuente está en su SDK) y crear su propia implementación que use el sabor support.v4 de Fragment y kin.

Estoy haciendo mi primera aplicación de Android y quería ingresar directamente a la API de ICS. Hasta ahora he creado una aplicación usando una barra de acciones, con pestañas que se pueden deslizar usando Viewpager y Fragmentos.

Sin embargo, experimento algunos errores que sigo volviendo.

Dependiendo de cómo lo implemente, siempre vuelvo a un error de "No coinciden los tipos": "no se puede convertir de android.support.v4.app.Fragment a android.app.Fragment". He intentado eliminar todas las referencias de importación a cualquiera, y este error aparece cuando solo uso android.support.v4.app.Fragment en TabListener, FragmentActivity y mis dos fragmentos.

El error ocurre en mi TabListener:

import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.Activity; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import android.util.Log; public class TabListener implements ActionBar.TabListener { private android.app.Fragment fragment; private Activity activity; private ViewPager pager; private FragmentTransaction ft; public TabListener(Activity activity, Fragment fragment, ViewPager pager) { this.activity = activity; this.fragment = fragment; this.pager = pager; } @Override public void onTabSelected(Tab tab, android.app.FragmentTransaction ft){ if (fragment == null) { ft.add(fragment, null); } else { ft.attach(fragment); } } @Override public void onTabReselected(Tab tab, android.app.FragmentTransaction ft){ // TODO Auto-generated method stub } @Override public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft){ // TODO Auto-generated method stub } }

Al eliminar "android.app.FragmentTransaction ft", reemplazándolo con solo "FragmentTransaction ft", el problema queda a la vista. Entonces surgen nuevos problemas:

El método enTabReselected (ActionBar.Tab, FragmentTransaction) de tipo TabListener debe anular o implementar un método de supertipo TabListener.java

El método enTabSelected (ActionBar.Tab, FragmentTransaction) de tipo TabListener debe anular o implementar un método de supertipo TabListener.java

El método enTabUnselected (ActionBar.Tab, FragmentTransaction) de tipo TabListener debe anular o implementar un método de supertipo TabListener.java

El tipo TabListener debe implementar el método abstracto heredado ActionBar.TabListener.onTabReselected (ActionBar.Tab, FragmentTransaction) TabListener.java

El tipo TabListener debe implementar el método abstracto heredado ActionBar.TabListener.onTabSelected (ActionBar.Tab, FragmentTransaction) TabListener.java

El tipo TabListener debe implementar el método abstracto heredado ActionBar.TabListener.onTabUnselected (ActionBar.Tab, FragmentTransaction) TabListener.java

¿Que está pasando aqui?

Como puede comprender, soy nuevo en el desarrollo de Java y Android. Siento que estoy bastante cerca, pero no puedo resolver este problema. No entiendo por qué quiere "convertir de android.support.v4.app.Fragment a android.app.Fragment cuando ni siquiera estoy importando android.app.Fragment en ningún lado.

Supongo que está relacionado con el uso del paquete de compatibilidad. (¿Tengo que usar este paquete al crear una aplicación para la versión más reciente del SDK?)


Esta solución funciona para mí

reemplazar

public class MyFragment extends Fragment{ }

con

public class MyFragment extends android.support.v4.app.Fragment{ }

y también reemplazar la importación

import android.app.Fragment;

con

import android.support.v4.app.Fragment;


He tenido el mismo problema ayer.

Hay una muy buena página de Samsung que cubre ActionBarSherlock. Compruebe si utiliza una de las importaciones / clases / métodos a la izquierda y reemplácelas por las importaciones / clases / métodos a la derecha.


Intenta usar getSupportFragmentManager() en getFragmentManager() lugar getFragmentManager()


Puede eliminar el paquete de soporte, y eso debería resolver su problema. Solo es necesario cuando necesita funciones de Android 3.0 y superior en aplicaciones para versiones anteriores.
En su caso, obtendrá los Fragmentos predeterminados de ICS y los Fragmentos del paquete de soporte, y si obtiene objetos de los diferentes paquetes, no funcionarán en conjunto.

Version corta; Utiliza un nivel de API por encima de Honecomb o el paquete de soporte, no ambos.


Sé que ha sido demasiado tarde para responder a esta pregunta, pero podría ayudar a alguien con el mismo problema.

Ve a tu carpeta java y haz clic en la actividad de tu fragmento.

En las importaciones, reemplace la import android.app.Fragment; con

import android.support.v4.app.Fragment;

Mantenga el código en MainActivity intacto y esto debería ayudar a resolver el problema.

Nota: si no funciona de inmediato, no se preocupe. Build> Rebuild project .


Yo tuve el mismo problema. Lo resolvió cambiando la interfaz de implements ActionBar.TabListener para implements TabListener y luego implementar los métodos dentro de esta interfaz. También se menciona el error que has mencionado.


mira aquí: fragmentTransaction.add(R.id.main_container, new HomeFragment()); agregas el fragmento pero sigues, usas el método replace() , entonces deberías usar replace en lugar de add()