¿Cómo puede una vista detectar cuando se está conectando a su padre?

Tengo una vista que necesite detectar cuando está siendo unida a su opinión del padre.

En un ViewGroup tengo el OnHierarchyChangeListener que me permite saber cuándo una vista de niño se agrega / quita, pero necesito lo contrario.

4 Solutions collect form web for “¿Cómo puede una vista detectar cuando se está conectando a su padre?”

Puede crear una vista personalizada y hacer sus cosas en su onAttachedToWindow

 public class CustomView extends View { public CustomView(Context context) { super(context); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); Log.d("CustomView", "onAttachedToWindow called for " + getId()); Toast.makeText(getContext(), "added", 1000).show(); } } 

[EDIT 1]

Puede asegurarse de que su vista personalizada agregada al grupo de vista correcto que desea

 @Override protected void onAttachedToWindow() { // TODO Auto-generated method stub super.onAttachedToWindow(); if(((View)getParent()).getId()== R.id.relativelayout2) { Log.d("CustomView","onAttachedToWindow called for " + getId()); Toast.makeText(context, "added", 1000).show(); } } 

Bueno, tienes la vista en OnHierarchyChangeListener, así que supongo que podrías añadir una devolución de llamada a tus vistas (subclasándolas con una interfaz) y llamarla desde OnHierarchyChangeListener. De esta manera, sus vistas serán llamadas al mismo tiempo que se llama a OnHierarchyChangeListener.

Sin embargo, no me sorprenderá que cuando esto suceda, que muchas propiedades de sus puntos de vista como sus dimensiones no pueden ser definidos todavía.

Creo que si necesita ese tipo de control, puede ser mejor hacerlo un fragmento. De esta manera obtendrá acceso a un ciclo de vida mucho más granular.

Usted puede mirar este problema en un diverso ángulo, si usted supervisa a los padres para las vistas unidas aplicando el método onViewAdded.

Ejemplo:

 public class LayoutInvokeChildAdded extends RelativeLayout { private OnDoneListener onDoneListener; public LayoutInvokeChildAdded(Context context) { super(context); } public LayoutInvokeChildAdded(Context context, AttributeSet attrs) { super(context, attrs); } public LayoutInvokeChildAdded(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void onViewAdded(View child) { super.onViewAdded(child); if (onDoneListener != null) onDoneListener.onDone(childe); } public void setOnDoneListener(OnDoneListener onDoneListener) { this.onDoneListener = onDoneListener; } } 
  • Aclaración sobre la propiedad de clipToPadding de Android
  • Dibujando una vista y todos sus hijos
  • ¿Hay una manera de localizar de forma programática todas las ventanas dentro de una aplicación determinada?
  • Obtener la visualización de la ventana desde el servicio de Android
  • ¿Cómo puede ajustar Android SnackBar a una posición específica en la pantalla
  • Mostrar más en ScrollView horizontal en android
  • Mostrar teclado de entrada suave
  • Ver para salir de la izquierda y entrar desde la derecha
  • Personalización de la barra de desplazamiento vertical de Android ScrollView
  • Cómo alinear el botón por centro y hacer offset
  • Mantener la vista de lista y el buscador de vistas sincronizados
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.