¿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.
- ¿Cómo implementar la vista de pila personalizada en android?
- Eventos de desplazamiento de HTML en un WebView de Android que está dentro de un ScrollView
- Android: Agregar una vista de forma programática omite algunos atributos de estilo
- Cambio de vista de la aplicación de Android en lugar de emulador
- Vista de navegación inferior con elemento personalizado (actionLayout)
- ¿Cómo se limita el número de puntos de vista?
- ¿Cómo puede saber si una vista es visible en la pantalla en Android?
- Android: escucha para detectar cambios en las propiedades de una vista (por ejemplo, android: layout_marginTop)
- Forzar el reajuste en un grupo de vista incluyendo todos sus hijos
- Vista web de Android: lee las cookies
- Cree una interfaz de usuario como Chrome para Android
- Android WebView pierde cookies en los redireccionamientos
- Interceptar el botón de menú de Android en un PopupWindow
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; } }
- Android Navegador textarea se desplaza por todo el lugar, es inutilizable
- Swiping de Android, usando ViewPager sin pestañas