¿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; } } 
  • Cómo hacer que SearchView siempre se expande en android?
  • ¿Cómo puedo definir el tamaño de los dibujables en el archivo de estilo?
  • Reproducción de un video local de aplicación (.mp4) en una vista web
  • Cómo hacer que el segundo fragmento se solape en el primer fragmento mientras que la transición del fragmento
  • WebViews en ViewPager no se cargan / representan hasta que se muestra la página
  • Cómo hacer una vista en android con esquinas redondeadas
  • Cambiar el contenido de la vista de la actividad dinámicamente
  • EditText no desplazable dentro de ScrollView
  • Elemento compartido animación entre RecyclerView elemento y CollapsingToolbar dentro de la misma actividad
  • Manejo de la rotación de la pantalla en WebView
  • Android: cómo posicionar una imagen ligeramente fuera de una vista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.