Agregar y eliminar vista del diseño

94

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

chiranjib
fuente
¿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);
Nathan Schwermann
fuente
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);
Sameer Segal
fuente
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);
Tofeeq Ahmad
fuente
¿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
Abel Terefe
fuente
4
removeAllViews () es lo que estaba buscando.
Alan
6

Para cambiar la visibilidad:

predictbtn.setVisibility(View.INVISIBLE);

Para eliminar:

predictbtn.setVisibility(View.GONE);
Ameen Maheen
fuente
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));
Kai Wang
fuente
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)
Rasoul Miri
fuente
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 ...

Zala Janaksinh
fuente
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);

Sanjay Goswami
fuente
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)
}
Gibolt
fuente