Adicionar e excluir visualização do Layout

94

Como posso adicionar e excluir uma visualização de um layout?

Chiranjib
fonte
que tipo de layout? você poderia colar parte do código em que está trabalhando?
Cristian
3
Como isso é bem preparado?
Cornelius

Respostas:

219

Eu fiz assim:

((ViewManager)entry.getParent()).removeView(entry);
Nathan Schwermann
fonte
44
Nos SDKs mais recentes é (ViewGroup):)
Ron
@schwiz, como podemos redefinir o id de visão neste caso. Meu problema é mesmo depois que minha atividade termina, sempre que a próxima visão é adicionada, o id de visão é incrementado. Eu quero que o id de visão seja padronizado para 1 quando eu voltar para esta atividade novamente .
AndroidNewBee
Muito obrigado por dar esta resposta
hem
ViewGroup estende View implementa ViewParent, ViewManager. melhor chamá-lo com transmissão para (ViewGroup)
Mercury
23

Use ViewStub e especifique o layout da visualização que deseja alternar. Ver:

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

Para desaparecer:

mViewStub.setVisibility(View.GONE);
Sameer Segal
fonte
40
Ocultar não é o mesmo que remover.
Darkwater
Se você quiser ocultar / mostrar você pode usar .setVisibility (View.INVISIBLE) e .setVisibility (View.VISIBLE). Quando a visualização está invisível, o usuário não pode interagir com ela.
dennisschagt
Digamos que eu tenha um textView com um onClickListener anexado a ele. Se eu fizer com que ele desapareça e tocar nele, o evento ainda será disparado?
ahitt6345
22

Este é o melhor jeito

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

Se você tiver um layout xml, não há necessidade de adicionar dinamicamente. Apenas chamar

lp.removeViewAt(0);
Tofeeq Ahmad
fonte
Qual será a diferença em termos de desempenho? Quero dizer, a diferença de desempenho de adicioná-los dinamicamente ou colocá-los em um arquivo de layout xml estático e deixá-lo ser inflado?
stdout de
19

Para adicionar visualização a um layout, você pode usar o addViewmétodo da ViewGroupclasse. Por exemplo,

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

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

Existem também vários métodos de remoção. Verifique a documentação do ViewGroup . Uma maneira simples de remover a visualização de um layout pode ser,

layout.removeAllViews(); // then you will end up having a clean fresh layout
Abel Terefe
fonte
4
removeAllViews () é o que eu estava procurando!
Alan
6

Para alterar a visibilidade:

predictbtn.setVisibility(View.INVISIBLE);

Para remover:

predictbtn.setVisibility(View.GONE);
Ameen Maheen
fonte
Isso resolveu meu problema, mais do que qualquer outra resposta. Útil se, como eu, o seu fundo ou alguns parâmetros impedem que a vista desapareça totalmente.
Virthuss,
1
é porque View.GONE não remove a visualização do layout, apenas a torna invisível e não ocupa nenhum espaço para fins de layout.
Victor
6

Grande resposta de Sameer e Abel Terefe. No entanto, quando você remove uma visão, na minha opção, você deseja remover uma visão com determinado id. Aqui está como você faz isso.

1, forneça um id à visualização ao criá-la:

_textView.setId(index);

2, remova a visualização com o id:

removeView(findViewById(index));
Kai Wang
fonte
1

você pode usar addView ou 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
fonte
0

oi se você é novo no Android, use desta forma Aplique sua visão para fazê-lo desaparecer É uma maneira, caso contrário, pegue a visão pai e remova o filho de lá ... senão pegue o layout pai e use isso método e remove todos os filhos parentView.remove (child)

Eu sugeriria usar a abordagem GONE ...

Zala Janaksinh
fonte
1
GONE efetivamente ocultará a visualização, mas não a removerá do layout
Sababado
1
Simples use o parentView.remove (removeViewName);
Zala Janaksinh
Você está certo sobre isso, mas eu estava tentando dar a entender que você não respondeu à pergunta fornecendo a solução "FOI".
Sababado
0

Estou removendo a visualização usando o método de início e contagem, adicionei 3 visualizações no Layout linear.

view.removeViews (0, 3);

Sanjay Goswami
fonte
0

Solução de extensão reutilizável Kotlin

Remoção simplificada

Adicione esta extensão:

myView.removeSelf()

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

Simplifique a adição

Aqui estão algumas opções:

// 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
fonte