tutorial studio navegar fragments example entre dinamicos diferencia desde activity abrir android android-fragments material-design

navegar - fragments dinamicos android studio



ComunicaciĆ³n entre pestaƱas SlidingTabLayout (3)

He buscado mucho sobre cómo comunicar fragmentos utilizando SlidingTabLayout, pero realmente no he obtenido una buena respuesta. Sé usar ActionBar, pero quería la nueva forma que es para Android lollipop usando SlidingTabLayout. Intenté esto-> http://android-er.blogspot.in/2012/06/communication-between-fragments-in.html pero quería material design. Me referí a este enlace http://www.android4devs.com/2015/01/how-to-make-material-design-sliding-tabs.html para hacer pestañas deslizantes de diseño de materiales. Ahora quería saber cómo comunicarme entre las pestañas deslizantes . Lo intenté mucho pero no pude encontrar la respuesta que estaba buscando. Cualquier ayuda sería realmente apreciada.



La forma más limpia es definir una interfaz que implementará la Activity que contiene los Fragment . Así es como recientemente resolví esto:

Primero defina la interfaz en su propio archivo, porque debe estar visible para otras clases.

public Interface FragmentCommunication { public void printMessage(String message); .... }

En tu Activity necesitas implementar esta interfaz

public class MainActivity extends ActionBarActivity implements FragmentCommunication { .... public void printMessage(String message) { System.out.println(message); } }

Finalmente, en su Fragment , puede obtener la Activity alojamiento con getActivity() y para usar los métodos de comunicación simplemente getActivity() la actividad a la interfaz de comunicación implementada de la siguiente manera:

((FragmentCommunication) getActivity()).printMessage("Hello from Fragment!");

EDITAR : Para pasar el mensaje a otros Fragment , haga lo siguiente: como todas las pestañas se extienden Fragment , es mejor crear otra interfaz

public Interface ReceiverInterface { public void receiveMessage(String str); }

Luego implementa esto en tus pestañas

public class Tab1 extends Fragment implements ReceiverInterface { .... code ..... public void receiveString(String str) { //use str } }

Para enviar este mensaje a otros Fragmentos, se requiere que la actividad los vea. Por ejemplo, ahora modifique printMessage() que Activity implementa en este

public void printMessage(String message) { System.out.println(message); //Send the message that came from one fragment to another if (tabFragment1 instanceof ReceiverInterface){ ((ReceiverInterface) tabFragment1).receiveMessage(message); } }


Cuando desliza las pestañas ( ViewPager ), puede trabajar con el mismo Fragment o usar Fragments diferentes.

Como mencionaste anteriormente, probaste esto , así que voy con diferentes Fragments .

Lo que vas a hacer es básicamente utilizar EventBus : https://github.com/greenrobot/EventBus .

build.gradle a sus dependencias build.gradle ubicadas dentro de la carpeta de la app .

dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) compile ''com.android.support:appcompat-v7:22.1.1'' compile ''de.greenrobot:eventbus:2.4.0'' }

También puedes lograrlo usando Intents .

1 - Crea una clase para representar el evento cuando tu texto cambie:

public class TextChangedEvent { public String newText; public TextChangedEvent(String newText) { this.newText = newText; } }

2 - Fragmento A:

//when text changes EventBus bus = EventBus.getDefault(); bus.post(new TextChangedEvent(newText));

3 - Fragmento B:

EventBus bus = EventBus.getDefault(); //Register to EventBus @Override public void onCreate(SavedInstanceState savedState) { bus.register(this); } //catch Event from fragment A public void onEvent(TextChangedEvent event) { yourTextView.setText(event.newText); }

Fuente: https://.com/a/20475430/1549700