Dónde / Cómo obtenerIntent (). GetExtras () en un Fragmento de Android?

Con Activities, solía hacer esto:

En la Actividad 1:

Intent i = new Intent(getApplicationContext(), MyFragmentActivity.class); i.putExtra("name", items.get(arg2)); i.putExtra("category", Category); startActivity(i); 

En la Actividad 2:

 Item = getIntent().getExtras().getString("name"); 

¿Cómo haces esto usando Fragmentos? Estoy usando la biblioteca de compatibilidad v4 también.

¿Va en FragmentActivity? ¿O el Fragmento real? ¿Y a qué método entra? onCreate? ¿onCreateView? ¿otro?

¿Y puedo ver el código de ejemplo, por favor?

EDITAR: Vale la pena señalar que estoy tratando de mantener la Actividad 1 como una Actividad (o realmente ListActivity donde estoy pasando el bash del elemento de lista al hacer clic) y luego pasar a un conjunto de fragmentos con tabs (a través de una Actividad de Fragmentos) y necesita cualquiera de las tabs para poder obtener los extras. (¿Espero que esto sea posible?)

Lo que tiendo a hacer, y creo que esto es lo que Google también pretendía que hicieran los desarrolladores, es obtener los extras de un Intent en una Activity y luego pasar cualquier dato extra a los fragmentos instanciando con argumentos.

De hecho, hay un ejemplo en el blog de desarrollo de Android que ilustra este concepto, y verá esto en varias de las demos de la API también. Aunque este ejemplo específico se proporciona para los fragmentos API 3.0+, se aplica el mismo flujo cuando se usa FragmentActivity y Fragment en la biblioteca de soporte.

Primero recupera los extras de bash como siempre en tu actividad y los pasa como argumentos al fragmento:

 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(); } } } 

En lugar de invocar directamente al constructor, probablemente sea más fácil usar un método estático que enchufa los argumentos en el fragmento por usted. Tal método a menudo se llama newInstance en los ejemplos dados por Google . En realidad hay un newInstance método de newInstance en newInstance , así que no estoy seguro de por qué no se usa en el fragmento de arriba …

De todos modos, todos los extras proporcionados como argumento al crear el fragmento estarán disponibles llamando a getArguments() . Como esto devuelve un Bundle , su uso es similar al de los extras en una 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) } 

todavía puedes usar

 String Item = getIntent().getExtras().getString("name"); 

en el fragment , solo necesitas llamar a getActivity() primero:

 String Item = getActivity().getIntent().getExtras().getString("name"); 

Esto le ahorra tener que escribir un código.