Comment démarrer une activité à partir d'un Fragment? [dupliquer]
cette question a déjà une réponse ici:
- démarrer une activité à partir d'un fragment 5 réponses
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?
5 réponses
vous devriez le faire avec getActivity().startActivity(myIntent)
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 ?
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);
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);
}
});
...
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);
où fBaseCtx
est BaseContext
de votre activité actuelle.
Vous pouvez l'obtenir comme fBaseCtx = getBaseContext();