ViewStub debe tener un ViewGroup no nulo viewParent

Estoy usando ViewStubs para cargar los datos de la demostración en mi diseño. Ya que estoy usando ButterKnife para enlazar los componentes de diseño, tengo clases personalizadas que contienen los componentes del layout de la viewtub individual, por ejemplo, una tal viewstub es la siguiente.

  <ViewStub android:id="@+id/featuredContentStub" android:layout_width="match_parent" android:layout_height="wrap_content" android:inflatedId="@+id/featuredContent" android:layout="@layout/featured_content" /> 

La clase para manejar los componentes @layout/featured_content es la siguiente:

 public class FeaturedContentView { @BindView(R.id.art) ImageView art; @BindView(R.id.shade) View shade; @BindView(R.id.title) TextView featuredTitle; @BindView(R.id.performer) TextView performer; @BindView(R.id.featured_title) KerningTextView featuredText; @BindView(R.id.play_button) Button play; @BindView(R.id.shareText) TextView shareText; @BindView(R.id.addToFavorites) ImageView addToFavs; FeaturedContentView(View view) { ButterKnife.bind(this, view); } } 

Hincho el diseño como este:

 if (viewstub != null) { View view = viewstub.inflate(); featuredContentView = new FeaturedContentView(view); } 

El método anterior se llama en dos lugares diferentes en mi fragmento. Infla correctamente la primera vez, pero falla la segunda vez citando java.lang.IllegalStateException: ViewStub must have a non-null ViewGroup viewParent .

¿Cómo puedo manejar esta situación.

Android infla ViewStub de esta manera:

  1. Inicialmente, agregue una ViewStub para ver la jerarquía de la misma manera que cualquier otra vista
  2. Reemplazar esa vista con el diseño especificado cuando llame inflate .

Esto significa que cuando el código se llama segunda vez, el objeto ViewStub original se desprende de la jerarquía View y ya se sustituye por la vista completa.

Personalmente, creo que ViewStub en su forma actual es muy inconveniente, especialmente cuando se trabaja con ButerKnife. Afortunadamente la clase en sí es muy simple, siempre se puede crear una clase personalizada, que hace lo mismo y añadir los métodos necesarios a ella (como isInflated , addInflateCallback , etc). Los desarrolladores de la biblioteca de soporte de Android han hecho lo mismo, por cierto.

  • Mostrar selección de la lista de sugerencias en la vista de búsqueda de Android
  • ¿Cómo puedo reconocer qué área de una imagen (no sólo las coordenadas) se ha tocado en Android?
  • ¿Por qué llamar a setBackgroundColor en una vista rompe su cambio de color de clic largo y resaltado?
  • Cambiar el color de fondo del botón SearchView y la consulta
  • Animar el cambio de color de fondo de la vista en Android
  • Android: superposición en la ventana sobre las actividades de una tarea
  • Obtener el id de una vista como String en el evento onClick
  • Relación de aspecto fija
  • ¿Cómo puedo cerrar un SearchView mediante programación?
  • Meta de Viewport para el navegador predeterminado de Android
  • Android dibuja usando SurfaceView y el hilo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.