Agregar y eliminar vista del diseño


94

¿Cómo puedo agregar y eliminar una vista de un diseño?


¿Qué tipo de diseño? ¿Podría pegar parte del código en el que está trabajando?
Cristian

3
¿Cómo está esto bien preparado?
Cornelius

Respuestas:


219

Lo he hecho así:

((ViewManager)entry.getParent()).removeView(entry);

44
En los SDK más nuevos, es (ViewGroup):)
Ron

@schwiz, ¿cómo podemos restablecer la identificación de la vista en este caso? Mi problema es incluso después de que mi actividad finaliza cada vez que se agrega la siguiente vista, la identificación de la vista se incrementa. Quiero que la identificación de la vista esté predeterminada en 1 cuando vuelva a esta actividad nuevamente .
AndroidNewBee

Muchas gracias por dar esta respuesta
dobladillo

ViewGroup amplía View implementa ViewParent, ViewManager. es mejor llamarlo con casting a (ViewGroup)
Mercury

23

Use ViewStub y especifique el diseño de la vista que desea alternar. Para ver:

mViewStub.setVisibility(View.VISIBLE) or mViewStub.inflate();

Desaparecer:

mViewStub.setVisibility(View.GONE);

40
Ocultar no es lo mismo que eliminar.
Darkwater

Si desea ocultar / mostrar, puede usar .setVisibility (View.INVISIBLE) y .setVisibility (View.VISIBLE). Cuando la vista es invisible, el usuario no puede interactuar con ella.
dennisschagt

Digamos que tengo un textView con un onClickListener adjunto. Si lo hago desaparecer y luego lo toco, ¿se activará el evento?
ahitt6345

22

Esta es la mejor manera

LinearLayout lp = new LinearLayout(this);
lp.addView(new Button(this));
lp.addView(new ImageButton(this));
// Now remove them 
lp.removeViewAt(0); // and so on

Si tiene un diseño xml, no es necesario agregar dinámicamente, solo llame

lp.removeViewAt(0);

¿Cuál será la diferencia en términos de rendimiento? Me refiero a la diferencia de rendimiento de agregarlos dinámicamente o ponerlos en un archivo de diseño xml estático y dejar que se infle.
salida

19

Para agregar vista a un diseño, puede usar el addViewmétodo de la ViewGroupclase. Por ejemplo,

TextView view = new TextView(getActivity());
view.setText("Hello World");

ViewGroup Layout = (LinearLayout) getActivity().findViewById(R.id.my_layout);
layout.addView(view); 

También hay varios métodos de eliminación. Consulte la documentación de ViewGroup . Una forma sencilla de eliminar la vista de un diseño puede ser como,

layout.removeAllViews(); // then you will end up having a clean fresh layout

4
removeAllViews () es lo que estaba buscando.
Alan

6

Para cambiar la visibilidad:

predictbtn.setVisibility(View.INVISIBLE);

Para eliminar:

predictbtn.setVisibility(View.GONE);

Solucionó mi problema, más que cualquier otra respuesta. Útil si como yo, tu fondo o algunos parámetros impiden que la vista desaparezca por completo.
Virthuss

1
se debe a que View.GONE no elimina la vista del diseño, solo la hace invisible y no ocupa espacio para fines de diseño.
Victor

6

Gran respuesta de Sameer y Abel Terefe. Sin embargo, cuando elimina una vista, en mi opción, desea eliminar una vista con cierta identificación. Así es como se hace.

1, asigne una identificación a la vista cuando la cree:

_textView.setId(index);

2, elimine la vista con la identificación:

removeView(findViewById(index));

1

puedes usar addView o removeView

Java:

// Root Layout
LinearLayout linearLayout = new LinearLayout(context);
linearLayout.setGravity(Gravity.CENTER);
linearLayout.setOrientation(LinearLayout.VERTICAL);

// TextView
TextView textView = new TextView(context);
textView.setText("Sample");

// Add TextView in LinearLayout
linearLayout.addView(textView);

// Remove TextView from LinearLayout
linearLayout.removeView(textView);

kotlin:

// Root Layout
val linearLayout = LinearLayout(context)
linearLayout.gravity = Gravity.CENTER
linearLayout.orientation = LinearLayout.VERTICAL

// TextView
val textView = TextView(context)
textView.text = "Sample"

// Add TextView in LinearLayout
linearLayout.addView(textView)

// Remove TextView from LinearLayout
linearLayout.removeView(textView)

0

hola, si es nuevo en Android, use de esta manera Aplique su vista para que desaparezca. método y eliminar todos los niños parentView.remove (child)

Sugeriría usar el enfoque GONE ...


1
GONE ocultará efectivamente la vista pero no la eliminará del diseño
Sábado

1
Simplemente use parentView.remove (removeViewName);
Zala Janaksinh

Tienes razón en eso, pero estaba tratando de insinuar que no estabas respondiendo a la pregunta proporcionando la solución "GONE".
Sábabado

0

Estoy eliminando la vista usando el método de inicio y conteo, he agregado 3 vistas en diseño lineal.

view.removeViews (0, 3);


0

Solución de extensión reutilizable Kotlin

Simplifique la eliminación

Agrega esta extensión:

myView.removeSelf()

fun View?.removeSelf() {
    this ?: return
    val parent = parent as? ViewGroup ?: return
    parent.removeView(this)
}

Simplificar la suma

Aquí hay algunas opciones:

// Built-in
myViewGroup.addView(myView)

// Null-safe extension
fun ViewGroup?.addView(view: View?) {
    this ?: return
    view ?: return
    addView(view)
}

// Reverse addition
myView.addTo(myViewGroup)

fun View?.addTo(parent: ViewGroup?) {
    this ?: return
    parent ?: return
    parent.addView(this)
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.