web-dev-qa-db-fra.com

Essayer d'ajouter un fragment à mon conteneur de fragments FrameLayout

J'ai créé un fichier xml appelé editor.xml qui contient un FrameLayout. Dans mon activité principale, j'essaie d'ajouter mon fragment personnalisé à mon FrameLayout.

L'erreur que je reçois en essayant d'ajouter mon fragment est:

La méthode add (int, Fragment) du type FragmentTransaction n'est pas applicable aux arguments (int, editorFrag)

Cependant, mon éditeur Frag étend Fragment, donc je ne comprends pas pourquoi cela se produit. Voici mon code pour les fichiers que j'ai mentionnés. Toute aide est appréciée.

Editor.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/fragment_container"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />

editorFrag.Java

public class editorFrag extends Fragment
{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) 
    {

        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.newlevel, container, false);
    }
}

MainActivity.Java

public class editorActivity extends FragmentActivity
{
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.editor);

        // Check that the activity is using the layout version with the fragment_container FrameLayout
        if(findViewById(R.id.fragment_container) != null)
        {
            // if we are being restored from a previous state, then we dont need to do anything and should
            // return or else we could end up with overlapping fragments.
            if(savedInstanceState != null)
                return;

            // Create an instance of editorFrag
            editorFrag firstFrag = new editorFrag();

            // add fragment to the fragment container layout
            getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFrag);
        }
    } 
}

Répondu:

Luksprog a répondu à ce problème pour moi ci-dessous en me disant de vérifier mes importations. Eclipse a choisi d'importer la version SDK de Fragment au lieu de la version de support dont j'avais besoin. Merci pour l'aide.

25
Pedrom

Vous avez oublié de commit() votre transaction.

33
Marcin Orlowski

ajoutez commit () comme ceci

 getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFrag).commit();
5
Din Islam Milon

Vous avez également oublié d'appeler la méthode addtoBackStack(), sinon votre application se ferme lorsque vous appuyez sur le bouton de retour.

5
seken1