Tenho um Layout no Android, e dentro dele tenho outros Layouts, e dentro desses layouts, views
Estou precisando remover os views recursivamente e somente depois demover os Layout.
Segue meu código abaixo:
public static void removeAllChildren(ViewGroup v) {
for (int x = 0; x < v.getChildCount(); x++) {
View child = v.getChildAt(x);
if (child instanceof ViewGroup) {
removeAllChildren((ViewGroup) child);
} else {
v.removeView(child);
}
}
}
Esse código não dá erro, dá erro no meu programa quando eu tenho adicionar os componentes na tela de novo:
Queria saber o que eu estou fazendo de errado, porque esse código começa a remover os views, mas depois para.
Isso… eu informo no parâmetro quem eu quero deletar.
Antes de deletar eu verifico se existem ‘filhos’ dentro desse ViewGroup. Caso exista, eu vou excluindo os ‘filhos’ para depois excluir o pai.
Eu coloquei um System.out.println() lá e percebi que ele entra dentro do Pai e começa a remover os filhos… mas ele para mesmo tendo um monte de coisas pra remover ainda.
Olá pessoal!
Resolvi o problema aqui. Na verdade eu teria que fazer assim:
public static void removeAllChildren(ViewGroup layout) {
for (int x = layout.getChildCount() - 1; x >= 0 ; x--) { //remover de trás pra frente
View child = layout.getChildAt(x);
System.out.println("view: " + child);
if (child instanceof ViewGroup) {
removeAllChildren((ViewGroup) child);
} else {
layout.removeView(child);
}
}
}
Me lembrei que isso acontece tbem no ActionScript3 da Adobe. (Não me lembro disso acontecer com o Swing…).
Quando removo um componente de um ViewGroup, ele traz os componentes do final pro começo da listagem… seria mais ou menos isso.