Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Comunicación entre las pestañas de SlidingTabLayout

He buscado mucho en cómo comunicarse entre fragmentos usando SlidingTabLayout pero realmente no tengo una buena respuesta. Sé que usando ActionBar pero quería la nueva forma que es para Android Lollipop con SlidingTabLayout. Lo intenté-> http://android-er.blogspot.in/2012/06/communication-between-fragments-in.html pero quería diseño material. Me referí a este enlace http://www.android4devs.com/2015/01/how-to-make-material-design-sliding-tabs.html para la fabricación de diseño de material deslizamiento de pestañas. Ahora quería saber cómo comunicarse entre las pestañas deslizantes . He intentado mucho pero no pude encontrar la respuesta que buscaba. Cualquier ayuda realmente apreciada.

  • Cómo implementar la ampliación de animación en elemento compartido en la transición de actividad
  • Colorear botones en Android con Material Design y AppCompat
  • Cambiar el color de texto del título de ActionBar usando el tema Light.DarkActionBar en AppCompat 21
  • CollapsingToolbarLayout no funciona (colapsando) cuando se desplaza
  • Barra de herramientas de colapso animado suave con Android Design Support Library
  • Estilo AppCompat v21 Dark ToolBar
  • ¿La mejor práctica para llevar el material a Preferencias usando AppCompat?
  • Android: Theme.Material.Light requiere el nivel API 21 (el min actual es 8)
  • 3 Solutions collect form web for “Comunicación entre las pestañas de SlidingTabLayout”

    La manera más limpia es definir una interfaz que implementará la Activity que contiene el Fragment . Así es como lo solucioné recientemente:

    Primero defina la interfaz en su propio archivo, porque tiene que ser visible para otras clases.

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

    En su Activity necesita 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 utilizar los métodos de comunicación para getActivity() la actividad a la interfaz de comunicación implementada de la siguiente manera:

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

    EDIT : Para pasar el mensaje a otro Fragment s hacer esto: ya que todas las pestañas se extienden Fragment es lo mejor para 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 es necesario que la actividad los vea. Por ejemplo, ahora modifique el printMessage() que la 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); } } 

    Al deslizar pestañas ( ViewPager ), puede trabajar con el mismo Fragment o utilizar 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 .

    Añádelo a las dependencias de 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 se puede lograr mediante Intents .

    1 – Crear una clase para representar el evento cuando cambia el texto:

     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://stackoverflow.com/a/20475430/1549700

    Utilice la biblioteca GitHub de EventBus. Esto es actualmente la manera más simple y más conveniente. https://github.com/greenrobot/EventBus

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.