¿Cómo puedo transferir datos de un fragmento a otro?

Una forma que sé que es a través de la actividad. Podemos enviar datos de fragmento a la actividad y la actividad de fragmentar ¿Hay alguna otra manera.

Para pasar datos de un fragmento a otro Bundle te ayudará.

 LifeShapeDetailsFragment fragment = new LifeShapeDetailsFragment(); // object of next fragment Bundle bundle = new Bundle(); bundle.putInt("position", id); fragment.setArguments(bundle); 

A continuación, push/call next Fragments.

Y el código al próximo Fragmento:

 Bundle bundle = this.getArguments(); int myInt = bundle.getInt("position", 0); 

Citando los documentos

A menudo, querrá que un fragmento se comunique con otro, por ejemplo para cambiar el contenido basado en un evento de usuario. Toda la comunicación Fragmento a Fragmento se realiza a través de la Actividad asociada. Dos Fragmentos nunca deben comunicarse directamente.

Le sugiero que siga el método en los documentos y no he probado ninguna otra alternativa

Para más información y ejemplo chekc los documentos en el siguiente enlace

http://developer.android.com/training/basics/fragments/communicating.html

Hay dos métodos que consideraría viables:

Comuníquese con su actividad de propietario y envíe mensajes a otros fragmentos a través de esa actividad propietaria, los detalles de que se pueden encontrar en la documentación oficial de Android aquí:

http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity

Citar:

En algunos casos, es posible que necesite un fragmento para compartir eventos con la actividad. Una buena manera de hacerlo es definir una interfaz de devolución de llamada dentro del fragmento y requerir que la actividad del host lo implemente. Cuando la actividad recibe una devolución de llamada a través de la interfaz, puede compartir la información con otros fragmentos en el diseño según sea necesario.

La interfaz de comunicación podría verse así:

 public interface IActionListener{ //You can also add parameters to pass along etc public void doSomething(); } 

El fragmento sería algo como esto:

 public class MyFragment extends Fragment{ private WeakReference<IActionListener> actionCallback; @Override public void onAttach(Activity activity) { super.onAttach(activity); try { // This makes sure that the container activity has implemented // the callback interface. If not, it throws an exception actionCallback = new WeakReference<IActionListener>((IActionListener) activity); } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement IActionListener."); } } } 

Estoy usando una WeakReference aquí, pero eso es realmente de usted. Ahora puede usar actionCallback para comunicarse con la actividad propietaria y llamar a los métodos definidos en IActionListener.

La actividad propietaria sería así:

 public class MyActivity extends ActionBarActivity implements IActionListener { public void doSomething(){ //Here you can forward information to other fragments } } 

B. Ahora, como para el segundo método – puede tener fragmentos de comunicarse directamente entre sí mediante interfaces también – de esta manera usted no tiene que saber la clase exacta del fragmento que está hablando, lo que asegura acoplamiento suelto.

La configuración es la siguiente: Tiene dos fragmentos (o más) y una actividad (para iniciar el segundo fragmento). Tenemos una interfaz que permite al Fragmento 2 enviar una respuesta al Fragmento 1 una vez que ha completado su tarea. Por razones de simplicidad, sólo reutilizamos la interfaz que definí en A.

Aquí está nuestro Fragmento 1:

 public class FragmentOne extends Fragment implements IActionListener { public void doSomething() {//The response from Fragment 2 will be processed here} } 

Utilizando el método descrito en A. El Fragmento 1 le pide que posea Actividad para iniciar el Fragmento 2. Sin embargo, la Actividad pasará a lo largo del Fragmento 1 como un argumento al Fragmento 2, de modo que el Fragmento 2 puede acceder indirectamente al Fragmento 1 y enviar la respuesta. Veamos cómo la Actividad prepara el Fragmento 2:

  public class MyActivity extends ActionBarActivity { // The number is pretty random, we just need a request code to identify our request later public final int REQUEST_CODE = 10; //We use this to identify a fragment by tag public final String FRAGMENT_TAG = "MyFragmentTag"; @Override public void onStartFragmentTwo() { FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); // The requesting fragment (you must have originally added Fragment 1 using //this Tag !) Fragment requester = manager.findFragmentByTag(FRAGMENT_TAG); // Prepare the target fragment Fragment target = new FragmentTwo(); //Here we set the Fragment 1 as the target fragment of Fragment 2's //communication endeavors target.getSelf().setTargetFragment(requester, REQUEST_CODE); // Hide the requesting fragment, so we can go fullscreen on the target transaction.hide(requester); transaction.add(R.id.fragment_container, target.getSelf(), FRAGMENT_TAG); transaction.addToBackStack(null); transaction.commit(); } } 

Sugerencia : Estoy utilizando el Support-Framework, por lo que si solo desarrollas para Android 3.0 puedes utilizar FragmentActivity en lugar de ActionBarActivity.

Ahora FragmentTwo se está iniciando, veamos cómo FragmentTwo se comunicaría con FragmentOne:

 public class FragmentTwo extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if(savedInstanceState != null){ // Restore our target fragment that we previously saved in onSaveInstanceState setTargetFragment(getActivity().getSupportFragmentManager().getFragment(savedInstanceState, TAG), MyActivity.REQUEST_CODE); } return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // Retain our callback fragment, the TAG is just a key by which we later access the fragment getActivity().getSupportFragmentManager().putFragment(outState, TAG, getTargetFragment()); } public void onSave(){ //This gets called, when the fragment has done all its work and is ready to send the reply to Fragment 1 IActionListener callback = (IActionListener) getTargetFragment(); callback.doSomething(); } } 

Ahora se llamará a la implementación de doSomething () en el fragmento 1.

Aquí está la solución,

Siga los siguientes pasos:

1 crear la interfaz como que

  public interface TitleChangeListener { public void onUpdateTitle(String title); } 

2.implemente su actividad usando esta interfaz

  for.eg public class OrderDetail extends ActionBarActivity implements TitleChangeListener 

3.en esta actividad crear en onUpdateTitle ()

  public void onUpdateTitle(String title) { //here orderCompletedDetail is the object second fragment name ,In which fragement I want send data. orderCompletedDetail.setTitle(title); } 

4. Ahora, en el fragmento uno escribe algún código.

  public class OrderPendingDetail extends Fragment { private View rootView; private Context context; private OrderDetail orderDetail; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.order_pending_detail, container, false); context = rootView.getContext(); //here OrderDetail is the name of ActionBarActivity orderDetail = (OrderDetail) context; //here pass some text to second Fragment using button ClickListener but_updateOrder.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // here call to Activity onUpdateTitle() orderDetail.onUpdateTitle("bridal"); } }); return rootView; } } 

5.escriba algún código en el segundo fragmento setTitle ()

  public void setTitle(String title) { TextView orderCompeted_name=(TextView)rootView.findViewById(R.id.textView_orderCompeted_name); orderCompeted_name.setText(title); //here you see the "bridal" value for TextView } 

En esta solución cuando hace clic en el botón del fragmento uno que el tiempo que muestra el valor en el segundo Fragmento. Espero que sea útil para usted .. !!

Permitir que los fragmentos se comuniquen entre sí utilizando las actividades como intermediarios es una práctica común cuando se utilizan fragmentos. Visite http://developer.android.com/guide/components/fragments.html para obtener más detalles sobre este patrón importante. Cada vez que necesite interactuar con otro fragmento, siempre debe utilizar un método en la actividad del fragmento en lugar de acceder al otro fragmento directamente. La única vez que tiene sentido acceder a un fragmento de otro es cuando sabes que no necesitarás reutilizar tu fragmento en otra actividad. Casi siempre debe escribir fragmentos asumiendo que los reutilizará en lugar de codificarlos entre sí.

  • OnCreateOptionsMenu no se llama a FragmentActivity cuando se ejecuta en la versión de teléfono
  • OnLoadFinished no se llama después de regresar de una pulsación de botón HOME
  • Mis fragmentos en la pestaña viewpager no se actualizan
  • ViewPager FragmentPagerAdapter Nullpointer
  • Configuración de ViewModel para MvxFragment
  • Utilizar la misma clase de Fragmento dos veces en diferentes contenedores
  • Retroceso y pérdida de memoria
  • No se puede obtener la barra de acciones en la clase de fragmento
  • Reiniciar el fragmento dentro de la actividad
  • La carga de Google Maps es demasiado lenta en la aplicación de Android
  • ¿Cómo puedo hacer que mi botón haga algo en Fragments, ViewPager
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.