¿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.

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; } } 
  • Adición de TextViews al widget de pantalla de inicio mediante programación
  • Cambiar el comportamiento de un GridView para que se desplace horizontalmente en lugar de verticalmente
  • ¿Qué hace exactamente offsetLeftAndRight ()?
  • ¿Es posible acortar los nombres de vista personalizada?
  • Mostrar más en ScrollView horizontal en android
  • ¿Cómo puedo asignar un ID a una vista mediante programación?
  • Diferencia entre setAlpha y setImageAlpha
  • ¿Cómo puede ajustar Android SnackBar a una posición específica en la pantalla
  • CookieSyncManager :: createInstance () necesita ser llamado antes de CookieSyncManager :: getInstance ()
  • Cambiar los archivos de diseño en la misma actividad
  • Android: textisselectable no funciona en la ventana TYPE_SYSTEM_ALERT
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.