web-dev-qa-db-fra.com

Ajout d'un fragment par programme à framelayout dans android

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;
21
Mike Baxter

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.

31
Steve Benett