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.
Use la biblioteca EventBus GitHub. Esta es actualmente la forma más simple y conveniente. https://github.com/greenrobot/EventBus
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