cómo acceder al botón del fragmento A del fragmento B

Tengo dos Fragment en mi Activity : el fragmento A con el botón X y el fragmento B con el botón Y

¿Cómo puedo cambiar la imagen de fondo del botón X cuando hago clic en el botón B ? ¿Es posible?

De la documentación,

Debido a que cada fragmento define su propio diseño y su propio comportamiento con sus propias devoluciones de llamada del ciclo de vida, puede incluir un fragmento en varias actividades, por lo que debe diseñar para su reutilización y evitar manipular directamente un fragmento de otro fragmento.

Dicho esto, lo que quieres hacer es crear devoluciones de eventos a 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. Esta es la forma recomendada para compartir eventos entre dos Fragment separados – es decir, compartir el evento a través de la actividad.

Echa un vistazo al enlace de arriba … proporciona un par de ejemplos agradables. Si sigues teniendo problemas, avísame y tal vez pueda ser más explícito.


Editar # 1:

Digamos que usted hace clic en un botón en el fragmento A y desea que esto cause cambios en un botón en el fragmento B He aquí un ejemplo de código que ilustra el concepto:

La interfaz de devolución de llamada:

 public interface OnButtonClickedListener { public void onButtonClicked(); } 

La actividad:

 public class SampleActivity extends Activity implements OnButtonClickedListener { /* Implementation goes here */ public void onButtonClicked() { // This method is called from fragment A, and when it is called, // it will send information to fragment B. Remember to first // check to see if fragment B is non-null. /* Make call to a method in fragment B that will update its display */ } } 

Fragmento A:

 public class FragmentA extends Fragment { OnButtonClickedListener mListener; /* Implementation goes here */ @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mListener = (OnButtonClickedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnButtonClickedListener "); } } public void clickButton() { // When the button is clicked, notify the activity. // The activity will then pass the information to fragment // B (if it has been created). mListener.onButtonClicked(); } } 

Editar # 2:

Ahora, usted podría estar preguntándose, "¿Por qué alguien nunca pasar por todo este problema? ¿Cuál es el punto de crear un método de devolución de llamada independiente de la actividad cuando sólo podría tener el fragmento A directamente manipular el fragmento B ?"

La principal razón por la que desea hacer esto es asegurarse de que cada fragmento está diseñado como un componente de actividad modular y reutilizable. Esto es especialmente importante porque un fragmento modular le permite cambiar las combinaciones de fragmentos para diferentes tamaños de pantalla. Al diseñar su aplicación para admitir tabletas y teléfonos, puede reutilizar sus fragmentos en diferentes configuraciones de diseño para optimizar la experiencia del usuario basándose en el espacio de pantalla disponible. Por ejemplo, en un teléfono, puede ser necesario separar fragmentos para proporcionar una interfaz de usuario de panel único cuando más de uno no puede encajar dentro de la misma actividad. Hacer uso de devoluciones de la actividad asegura que podrá fácilmente reutilizar sus fragmentos en situaciones donde el fragmento B no está visible en la pantalla. Por ejemplo, si está en un dispositivo de mano y no hay espacio suficiente para mostrar el fragmento B , entonces puede comprobar su actividad fácilmente para ver si el fragmento B se muestra en la pantalla.

Lo siento si esto no está claro … Me resulta difícil describir: P. Trabajar su camino a través de este tutorial puede ayudar … Las devoluciones de llamadas de la actividad hacen su vida especialmente fácil como desarrollador cuando está trabajando con diseños interactivos de varios paneles.

Base en la respuesta de Alex Lockwood:

La actividad:

 public class SampleActivity extends Activity{ public interface OnButtonClickedListener { public void onButtonClicked(); } private OnButtonClickedListener onButtonClickedListener = null; public OnButtonClickedListener getOnButtonClickedListener () { return onButtonClickedListener } public void setOnButtonClickedListener ( OnButtonClickedListener onButtonClickedListener { this.onButtonClickedListener = onButtonClickedListener; } } 

Fragmento A:

 public class FragmentA extends Fragment { private OnButtonClickedListener onButtonClickedListener = null; private OnClickListener actionBarClickListener = new OnClickListener() { @Override public void onClick(View view) { if (onButtonClickedListener == null){ onButtonClickedListener = ((SampleActivity) getActivity()).onButtonClickedListener (); } if (onButtonClickedListener != null) { onButtonClickedListener .onButtonClicked(); } } }; 

}

Fragmento B:

  public class FragmentB extends Fragment { private OnButtonClickedListener onButtonClickedListener = new OnButtonClickedListener() { @Override public void onButtonClicked() { Toast.makeText(getActivity(), "Button clicked", Toast.LENGTH_SHORT).show(); } }; @Override public void onResume() { super.onResume(); SampleActivity sampleActivity = (SampleActivity) getActivity(); sampleActivity.setSearchBoxTextChangedListener(onButtonClickedListener); } 

}

La esperanza puede ayudar a alguien.

Si configura el atributo onClick para un botón en su diseño, incluso el diseño de su fragmento, llamará al método apropiado en su Activity .

Su aplicación puede enviar esta señal de su Activity al fragmento B.

  • Uso del menú Opciones en una actividad de varios fragmentos
  • SwipeRefreshLayout Got Action_Move congela la vista
  • Actualizar o volver a dibujar el fragmento
  • Android gestiona fragmentos de actividad elegantemente
  • Detener fragmento de ser recreado después de reanudar?
  • Android: flujo maestro / detallado (panel dual) con 1 actividad
  • Establecer un subtítulo en mi barra de herramientas de un fragmento
  • Comunicación de Android entre la actividad y el fragmento
  • ¿Debo usar AppCompat v7 si minsdk es 14
  • Acceda a la vista de fragmentos de padres de ViewPager en el fragmento secundario de Pager
  • Fragmentos como clases estáticas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.