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:
- ¿Cómo puedo recuperar el botón de trabajo cuando searchview en Android
- Mostrar sugerencias para un vacío SearchView
- Android: vista de 360 grados de un objeto
- Se debe hacer clic en SearchView dos veces para abrir
- Cómo escuchar el botón de búsqueda del teclado en searchView
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: Tutorial sobre la creación de vistas personalizadas
- Android, programatically diseño de una vista de botón?
- Derecho a la izquierda ProgressBar?
- Establecer una imagen de fondo en una vista extiende mi vista
- Guardar vista de mapa de bits con getDrawingCache da una imagen en negro
- Vista de superficie como un mapa de bits en android
- Actividad de búsqueda que no se está iniciando al pulsar Intro
- Android: ¿Cómo crear una vista personalizada modal?
Android infla ViewStub de esta manera:
- Inicialmente, agregue una ViewStub para ver la jerarquía de la misma manera que cualquier otra vista
- 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.