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.
- Cambiar diseño de material AppCompat ActionBar Color
- ¿Cómo puedo obtener la barra de búsqueda de Google Now en mi aplicación?
- El cuadro de diálogo de alerta de Android no está bien diseñado en Lollipop
- Obtención de error al inflar la clase android.support.design.widget.NavigationView
- Diseño de material android con AppCompatActivity
- Aspecto de ShareActionProvider
- Animaciones de descubrimiento de funciones para Android
- Configuración del color del encabezado de la aplicación en la vista general (aplicaciones recientes)
- Diseño del material de Android Studio ... styles.xml
- Estilizar / colorear el botón SwitchCompat en Android Lollipop para el diseño del material
- ¿Cómo mostrar un cuadro de diálogo en Android con el efecto revelador del diseño de material?
- Cambiar actionOverflowButtonStyle con appcompat v21
- Cómo establecer el estilo de diseño de material a deshabilitado EditText (android)?
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); }
Utilice la biblioteca GitHub de EventBus. Esto es actualmente la manera más simple y más conveniente. https://github.com/greenrobot/EventBus
- No se pudo generar el proyecto Xamarin.Android con "Error XA5209: Error al descomprimir"
- Mostrar cuadros de diálogo de mensajes sencillos