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.
Vous avez oublié de commit()
votre transaction.
ajoutez commit () comme ceci
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFrag).commit();
Vous avez également oublié d'appeler la méthode addtoBackStack()
, sinon votre application se ferme lorsque vous appuyez sur le bouton de retour.