Comment démarrer une activité à partir d'un Fragment? [dupliquer]

cette question a déjà une réponse ici:

j'ai un ensemble d'onglets à l'intérieur d'un FragmentActivity qui tiennent chacun leur propre fragment. Quand j'ai essayé de démarrer une nouvelle activité à partir de ce fragment via un onClickListener , et en utilisant la méthode startActivity(myIntent) , ma force d'application se ferme.

Après avoir regardé autour pendant un moment, j'ai trouvé une référence ou deux à une méthode appelée startActivityFromFragment , mais après avoir cherché pendant une heure ou donc je ne peux pas trouver des explications ou des exemples de comment l'utiliser, ou si c'est ce que je doit utiliser.

je suppose que ce que je demande c'est s'il y a une différence entre le lancement d'une nouvelle activité à partir d'une activité et le lancement d'une nouvelle activité à partir d'un fragment, et si oui, que dois-je mettre en œuvre?

48
demandé sur EkKoZ 2012-08-22 17:48:03

5 réponses

vous devriez le faire avec getActivity().startActivity(myIntent)

49
répondu EkKoZ 2012-08-22 13:52:49

Je l'ai fait, le code ci-dessous fonctionne pour moi....

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.hello_world, container, false);

        Button newPage = (Button)v.findViewById(R.id.click);
        newPage.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), HomeActivity.class);
                startActivity(intent);
            }
        });
        return v;
    }

et s'il vous plaît assurez-vous que votre activité de destination doit être enregistrée dans le Manifeste.fichier xml,

mais dans mon cas, tous les onglets ne sont pas affichés dans HomeActivity, une solution pour cela ?

43
répondu Jayesh 2013-05-20 08:00:04

la différence entre démarrer une activité à partir d'un Fragment et une activité est de savoir comment vous obtenez le contexte, parce que dans les deux cas, il doit s'agir d'une activité.

D'une activité: Le contexte est l'activité courante ( this )

Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);

D'un fragment: Le contexte est l'activité mère ( getActivity() ). Notez que le fragment lui-même peut démarrer l'activité via startActivity() ce n'est pas nécessaire d'être fait à partir de l'activité.

Intent intent = new Intent(getActivity(), NewActivity.class);
startActivity(intent);
10
répondu David Dostal 2016-10-09 10:44:35

je le fais comme ceci, pour lancer L'activité SendFreeTextActivity à partir d'un fragment de menu (personnalisé) qui apparaît dans plusieurs activités:

dans la classe MenuFragment:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_menu, container, false);

    final Button sendFreeTextButton = (Button) view.findViewById(R.id.sendFreeTextButton);
    sendFreeTextButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.d(TAG, "sendFreeTextButton clicked");
            Intent intent = new Intent(getActivity(), SendFreeTextActivity.class);
            MenuFragment.this.startActivity(intent);
        }
    });
    ...
6
répondu fadedbee 2013-01-25 12:17:43

utilisez le contexte de Base de l'activité dans laquelle votre fragment réside pour lancer une intention.

Intent j = new Intent(fBaseCtx, NewactivityName.class);         
startActivity(j);

fBaseCtx est BaseContext de votre activité actuelle. Vous pouvez l'obtenir comme fBaseCtx = getBaseContext();

1
répondu user2766004 2013-11-21 20:18:12