J'essaie de construire une interface utilisateur combinant des éléments statiques et dynamiques. Pour cela, j'ai divisé mon activité en fragments - toute la navigation dans l'application se fait ensuite en remplaçant les fragments au lieu de naviguer entre les activités.
Dans ma structure d'activité principale, j'utilise un FrameLayout
:
<FrameLayout
Android:id="@+id/mainframe"
Android:layout_height="match_parent"
Android:layout_width="match_parent"
Android:layout_below="@id/topsection"
Android:layout_above="@id/lowersection" />
J'ai un fragment déclaré comme tel:
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragmentlayout, container, false);
}
}
Ensuite, dans mon activité principale (qui étend FragmentActivity et utilise l'importation Android.support.v4.app.FragmentActivity
, J'essaie de charger ce fragment dans la disposition du cadre.
MyFragment myf = new MyFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.mainframe, myf);
transaction.commit();
J'ai suivi cela à partir de nombreux autres exemples, mais je reçois une erreur de compilation sur la commande transaction.add()
, que personne d'autre ne semble avoir rencontrée.
L'erreur que je reçois est: The method add(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, MyFragment)
.
Pourquoi est-ce? La classe MyFragment
étend Fragment
donc j'aurais pensé que cela fonctionnerait. Qu'est-ce que je fais mal?
Edit: Les importations pour mon activité principale sont:
import org.joda.time.DateTime;
import Android.app.FragmentTransaction;
import Android.database.Cursor;
import Android.os.Bundle;
import Android.os.Handler;
import Android.support.v4.app.FragmentActivity;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
import Android.widget.TextView;
import Android.widget.Toast;
Vérifiez vos importations. Utilisez Android.support.v4.app.FragmentTransaction
Au lieu de Android.app.FragmentTransaction
.
De plus, assurez-vous d'utiliser Android.support.v4.app.Fragment
Et d'appeler getSupportFragmentManager()
. Il est facile de manquer ces appels/importations. Thx à saiful103a avec le soupçon du FragmentManager.