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()