Me gustaría agregar para los principiantes que la diferencia entre las 2 respuestas más votadas aquí está dada por el uso diferente de un fragmento.
Si usa el fragmento dentro de la clase java donde tiene los datos que desea pasar, puede aplicar la primera respuesta para pasar los datos:
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);
Sin embargo, si utiliza, por ejemplo, el código predeterminado proporcionado por Android Studio para fragmentos con pestañas, este código no funcionará.
No funcionará incluso si reemplaza el PlaceholderFragment predeterminado con sus FragmentClasses, e incluso si corrige el FragmentPagerAdapter a la nueva situación agregando un interruptor para getItem () y otro interruptor para getPageTitle () (como se muestra aquí )
Advertencia: el clip mencionado anteriormente tiene errores de código, que explicaré más adelante, pero es útil para ver cómo pasar del código predeterminado al código editable para fragmentos con pestañas). El resto de mi respuesta tiene mucho más sentido si considera las clases de Java y los archivos xml de ese clip (representativo del primer uso de fragmentos con pestañas en un escenario para principiantes).
La razón principal por la que la respuesta más votada de esta página no funcionará es que en ese código predeterminado para fragmentos con pestañas, los fragmentos se usan en otra clase de Java: ¡FragmentPagerAdapter!
Entonces, para enviar los datos, tiene la tentación de crear un paquete en MotherActivity y pasarlo en el FragmentPagerAdapter, utilizando la respuesta n. ° 2.
Solo que eso está mal otra vez. ( Probablemente podría hacerlo así, pero es solo una complicación que realmente no es necesaria ).
Creo que la forma correcta / más fácil de hacerlo es pasar los datos directamente al fragmento en cuestión, utilizando la respuesta n. ° 2. Sí, habrá un fuerte acoplamiento entre la Actividad y el Fragmento, PERO, para los fragmentos con pestañas, eso es algo esperado. Incluso te aconsejaría que crees los fragmentos con pestañas dentro de la clase java MotherActivity (como subclases, ya que nunca se usarán fuera de MotherActivity). Es fácil, solo agrega dentro de la clase java MotherActivity tantos Fragmentos como necesites así:
public static class Tab1 extends Fragment {
public Tab1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.your_layout_name_for_fragment_1, container, false);
return rootView;
}
}.
Por lo tanto, para pasar datos de MotherActivity a un Fragmento de este tipo, deberá crear cadenas / paquetes privados sobre la actividad onCreate of your Mother, que puede completar con los datos que desea pasar a los fragmentos y transmitirlos a través de un método creado después de onCreate (aquí llamado getMyData ()).
public class MotherActivity extends Activity {
private String out;
private Bundle results;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mother_activity);
// for example get a value from the previous activity
Intent intent = getIntent();
out = intent.getExtras().getString("Key");
}
public Bundle getMyData() {
Bundle hm = new Bundle();
hm.putString("val1",out);
return hm;
}
}
Y luego, en la clase de fragmento, usas getMyData:
public static class Tab1 extends Fragment {
/**
* The fragment argument representing the section number for this
* fragment.
*/
public Tab1() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.your_layout_name_for_fragment_1, container, false);
TextView output = (TextView)rootView.findViewById(R.id.your_id_for_a_text_view_within_the_layout);
MotherActivity activity = (MotherActivity)getActivity();
Bundle results = activity.getMyData();
String value1 = results.getString("val1");
output.setText(value1);
return rootView;
}
}
Si tiene consultas en la base de datos, le aconsejo que las haga en MotherActivity (y pase sus resultados como Strings / Integers adjuntos a las teclas dentro de un paquete como se muestra arriba), como dentro de los fragmentos con pestañas, su sintaxis se volverá más compleja (esto se vuelve getActivity () por ejemplo, y getIntent se convierte en getActivity (). getIntent), pero también tiene la opción de hacer lo que desee.
Mi consejo para principiantes es centrarse en pequeños pasos. Primero, obtenga su intención de abrir una actividad con pestañas muy simple, sin pasar CUALQUIER dato. ¿Funciona? ¿Abre las pestañas que esperas? Si no, ¿por qué?
Comience a partir de eso, y aplicando soluciones como las presentadas en este clip , vea lo que falta. Para ese clip en particular, el mainactivity.xml nunca se muestra. Eso seguramente te confundirá. Pero si presta atención, verá que, por ejemplo, el contexto (herramientas: contexto) es incorrecto en los archivos de fragmentos xml. Cada fragmento XML necesita apuntar a la clase de fragmento correcta (o subclase usando el separador $).
También verá que en la clase de actividad principal de Java necesita agregar tabLayout.setupWithViewPager (mViewPager) - justo después de la línea TabLayout tabLayout = (TabLayout) findViewById (R.id.tabs); sin esta línea, su vista en realidad no está vinculada a los archivos XML de los fragmentos, pero muestra SOLO el archivo xml de la actividad principal.
Además de la línea en la clase java de actividad principal, en el archivo XML de actividad principal debe cambiar las pestañas para que se ajusten a su situación (por ejemplo, agregar o quitar elementos de tabla). Si no tiene pestañas en el XML principal de la actividad, posiblemente no eligió el tipo de actividad correcto cuando lo creó en primer lugar (nueva actividad - actividad con pestañas).
¡Tenga en cuenta que en los últimos 3 párrafos hablo sobre el video! Entonces, cuando digo XML de actividad principal, es el XML de actividad principal en el video, que en su situación es el archivo XML de MotherActivity.