wake-up-neo.com

Konvertierung von Android.support.v4.app.Fragment in Android.app.Fragment nicht möglich

Ich mache meine erste Android-App und wollte direkt in die API ICS einsteigen. Ich habe bisher eine App mit einer ActionBar erstellt, mit ausfahrbaren Registerkarten mit Viewpager und Fragmenten.

Ich erlebe jedoch einige Fehler, zu denen ich immer wieder komme.

Je nachdem, wie ich es implementiere, kehre immer wieder zu einem Fehler "Typenkonflikt" zurück: "Kann nicht von Android.support.v4.app.Fragment in Android.app.Fragment konvertieren". Ich habe versucht, alle Importverweise zu entfernen, und diese Fehlermeldung wird angezeigt, wenn ich in TabListener, FragmentActivity und meinen beiden Fragmenten nur Android.support.v4.app.Fragment verwende.

Der Fehler tritt in meinem TabListener auf:

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  
    }
}

Wenn Sie "Android.app.FragmentTransaction ft" entfernen und nur "FragmentTransaction ft" ersetzen, wird das Problem falsch. Dann entstehen neue Probleme:

Die Methode onTabReselected (ActionBar.Tab, FragmentTransaction) vom Typ TabListener muss die Supertyp-Methode TabListener.Java überschreiben oder implementieren

Die Methode onTabSelected (ActionBar.Tab, FragmentTransaction) vom Typ TabListener muss eine Supertyp-Methode TabListener.Java überschreiben oder implementieren

Die Methode onTabUnselected (ActionBar.Tab, FragmentTransaction) vom Typ TabListener muss die Supertyp-Methode TabListener.Java überschreiben oder implementieren

Der Typ TabListener muss die geerbte abstrakte Methode ActionBar.TabListener.onTabReselected (ActionBar.Tab, FragmentTransaction) TabListener.Java implementieren

Der Typ TabListener muss die geerbte abstrakte Methode ActionBar.TabListener.onTabSelected (ActionBar.Tab, FragmentTransaction) TabListener.Java implementieren

Der Typ TabListener muss die geerbte abstrakte Methode ActionBar.TabListener.onTabUnselected (ActionBar.Tab, FragmentTransaction) TabListener.Java implementieren

Was ist denn hier los?

Wie Sie vielleicht verstehen, bin ich neu in der Entwicklung von Java und Android. Ich fühle mich ziemlich nahe, aber ich kann dieses Problem nicht lösen. Ich verstehe nicht, warum es "von Android.support.v4.app.Fragment nach Android.app.Fragment konvertieren will, wenn ich Android.app.Fragment nicht einmal irgendwo importiere.".

Ich denke, es hängt mit dem Kompatibilitätspaket zusammen. (Muss ich dieses Paket überhaupt verwenden, wenn Sie eine App für die neueste Version des SDK erstellen?)

43
SLekvak

Versuchen Sie stattdessen getSupportFragmentManager() zu verwenden getFragmentManager()

123
gayavat

Was ist denn hier los?

Während das Android Support-Paket eine abwärtskompatible Fragment-Implementierung bietet, ist ActionBar not Teil des Android-Support-Pakets. Daher erwartet ActionBar.TabListener native Fragment-Objekte auf API-Ebene 11. Erwägen Sie die Verwendung von ActionBarSherlock, um sowohl eine Aktionsleiste als auch Android-Support-Fragmente zu haben.

ich habe dann aber noch ein anderes Problem in meinem FragmentPagerAdapter

Die FragmentPagerAdapter im Android Support-Paket ist etwas unordentlich - es werden API-Level 11-Fragment-Objekte benötigt, keine Android-Support Fragment-Objekte. Sie können die Quelle jedoch nach FragmentPagerAdapter klonen (die Quelle ist in Ihrem SDK) und Ihre eigene Implementierung erstellen, die die support.v4-Variante von Fragment und kin verwendet.

14
CommonsWare

Ich weiß, dass es zu spät war, diese Frage zu beantworten, aber es könnte jemandem mit dem gleichen Problem helfen. 

Gehen Sie in Ihren Java Ordner und klicken Sie auf die Aktivität Ihres Fragments.

Ersetzen Sie beim Importieren import Android.app.Fragment; durch 

import Android.support.v4.app.Fragment;

Behalten Sie den Code in der Datei MainActivity bei, und dies sollte zur Behebung des Problems beitragen.

Hinweis: Wenn es nicht sofort funktioniert, machen Sie sich keine Sorgen. Build> Projekt neu erstellen .

4
4127157

Diese Lösung funktioniert für mich

ersetzen 

public class MyFragment extends Fragment{
}

mit

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

und auch Import ersetzen

import Android.app.Fragment;

mit

import Android.support.v4.app.Fragment;
4

schauen Sie hier: fragmentTransaction.add(R.id.main_container, new HomeFragment()); Sie fügen das Fragment hinzu, aber folgen Sie der replace()-Methode. Verwenden Sie also replace statt add()

0
X.Fain

Ich hatte gestern das gleiche Problem.

Es gibt eine wirklich schöne -Seite von Samsung , die ActionBarSherlock ..__ abdeckt. Prüfen Sie, ob Sie eine der Import/Klassen/Methoden auf der linken Seite verwenden und diese durch die Import/Klassen/Methoden auf der rechten Seite ersetzen.

0
Lesik2008

Ich hatte das gleiche Problem. Gelöst wurde es durch Ändern der Schnittstelle von implements ActionBar.TabListener in implements TabListener und Implementieren der Methoden in dieser Schnittstelle. Es wurde auch der von Ihnen erwähnte Fehler erwähnt.

0
RmK

Sie können das Support-Paket entfernen und das Problem sollte dadurch gelöst werden. Sie wird nur benötigt, wenn Sie Funktionen von Android 3.0 und höher in Apps für frühere Versionen benötigen.
In Ihrem Fall erhalten Sie sowohl die Standard-Fragmente von ICS als auch die Fragmente aus dem Support-Paket. Wenn Sie Objekte aus den verschiedenen Paketen erhalten, funktionieren sie nicht zusammen. 

Kurze Version; Sie verwenden entweder ein API-Level oberhalb von Honecomb oder des Support-Pakets, nicht beides. 

0
Jave