Ce que j'ai tendance à faire, et je crois que c'est ce que Google destine aux développeurs d'en faire trop, est de toujours obtenir les extras à partir d'un Intent
en Activity
puis à transmettre toutes les données supplémentaires à des fragments par l'instanciation d'entre eux avec des arguments.
Il y a en fait un exemple sur l'Android dev blog qui illustre ce concept, et vous verrez cela dans plusieurs de l'API démos trop. Bien que cet exemple est donné pour API 3.0+ fragments, le même flux s'applique lors de l'utilisation d' FragmentActivity
et Fragment
à partir de la bibliothèque de prise en charge.
Vous d'abord récupérer l'intention des extras comme d'habitude dans votre activité et de les transmettre en tant qu'arguments à ce fragment:
public static class DetailsActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// (omitted some other stuff)
if (savedInstanceState == null) {
// During initial setup, plug in the details fragment.
DetailsFragment details = new DetailsFragment();
details.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(
android.R.id.content, details).commit();
}
}
}
Au lieu de directement en appelant le constructeur, il est probablement plus facile d'utiliser une méthode statique qui obstrue les arguments dans le fragment pour vous. Une telle méthode est souvent appelée newInstance
dans les exemples donnés par Google. En fait il y a un newInstance
méthode de DetailsFragment
, donc je ne suis pas sûr pourquoi il n'est pas utilisé dans l'extrait ci-dessus...
De toute façon, tous les extras fourni comme argument lors de la création de ce fragment, sera disponible en appelant getArguments()
. Depuis ce retourne un Bundle
, son utilisation est similaire à celle des extras dans un Activity
.
public static class DetailsFragment extends Fragment {
/**
* Create a new instance of DetailsFragment, initialized to
* show the text at 'index'.
*/
public static DetailsFragment newInstance(int index) {
DetailsFragment f = new DetailsFragment();
// Supply index input as an argument.
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
return f;
}
public int getShownIndex() {
return getArguments().getInt("index", 0);
}
// (other stuff omitted)
}