Quero forçar a exibição principal do recurso de layout para redesenhar / atualizar, digamos o método Activity.onResume (). Como posso fazer isso ?
Na exibição principal do layout, quero dizer a ('R.layout.mainscreen' abaixo) que é chamada em minha Activity.onCreate (), assim: -
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainscreen);
}
Respostas:
Para responder estritamente à pergunta: Use invalidate ():
Agora, quando a Atividade é retomada, faz com que cada Visualização se desenhe. Nenhuma chamada para invalidar () deve ser necessária. Para aplicar o tema, faça-o antes de desenhar qualquer Visualização, ou seja, antes de
setContentView(R.layout.mainscreen);
A referência do documento da API está aqui: http://developer.android.com/reference/android/view/ContextThemeWrapper.html#setTheme%28int%29
Como o método onDraw () funciona em Views já instanciadas, setTheme não funcionará. Eu não tenho experiência com temas, mas duas opções alternativas que posso pensar são:
fonte
Experimentar
getWindow().getDecorView().findViewById(android.R.id.content).invalidate();
fonte
Experimente
recreate()
fazer com que esta atividade seja recriada.fonte
onResume
método. Isso me dá um loop infinito: /Solução:
Pessoal, tentei todas as suas soluções, mas elas não funcionaram para mim, tenho que definir setVisibility of EditText como VISIBLE e esse EditText deve ficar visível no ScrollView , mas não consegui atualizar a visualização raiz para entrar em vigor. Resolvi meu problema, quando preciso atualizar a exibição, alterei a visibilidade do ScrollView para GONE e, em seguida, defina-a como VISIBLE para entrar em vigor e funcionou para mim. Esta não é a solução exata, mas apenas funcionou.
fonte
Aparentemente, chamar
invalidate()
oupostInvalidate()
no layout raiz NÃO garante que as visualizações de crianças sejam redesenhadas. No meu caso específico, meu layout raiz era um TableLayout e tinha vários filhos da classe TableRow e TextView. ChamandopostInvalidate()
, ourequestLayout()
ou mesmoforceLayout()
na raiz TableLayout objeto não causou quaisquer TextViews no layout a ser redesenhado.Então, o que acabei fazendo foi analisar recursivamente o layout procurando por esses TextViews e, em seguida, chamando
postInvalidate()
cada um desses objetos TextView.O código pode ser encontrado no GitHub: https://github.com/jkincali/Android-LinearLayout-Parser
fonte
Caso contrário, você pode tentar isso também-
fonte
Basta definir a visualização do conteúdo em um resumo
setContentView (R.layout.yourview) dentro de onResume ..
Exemplo:
fonte
Tente esta solução alternativa para o problema de tema:
fonte
Isso permite que você recarregue com alterações de tema e oculte as animações.
fonte
Eu estava tendo esse problema também, mas seguindo o exemplo de Farhan,
setContentView()
fiz exatamente isso. usarsetContentView()
por si só não era suficiente. Eu descobri que tinha que repovoar todas as minhas opiniões com informações. Para consertar isso, eu apenas puxei todo esse código para outro método (eu o chamei de build) e no meuonCreate
método eu chamo de build. Agora, sempre que ocorrer meu evento, que desejo que minha atividade seja "atualizada", chamo apenas de compilação, forneça as novas informações (que passo como parâmetros para compilar) e tenho uma atividade atualizada.fonte
Este parece ser um bug conhecido .
fonte
Não sei se isso é seguro ou não, mas funcionou para mim. Eu meio que corri para este problema sozinho e tentou
invalidate()
erequestLayout()
, mas sem sucesso. Então eu liguei para o meuonCreate(null)
tudo de novo e funcionou. Se isso não for seguro, entre em contato. Espero que isto seja útil a alguém.fonte
É assim que eu costumava atualizar meu layout
fonte
Para limpar uma exibição que estende o ViewGroup, você só precisa usar o método
removeAllViews()
Assim (se você tiver um ViewGroup chamado
myElement
):fonte
Tente isto
fonte
Não tenho certeza se é uma boa abordagem, mas eu ligo sempre assim:
fonte
Apenas chame a atividade novamente usando a intenção. Por exemplo, para atualizar o layout de MainActivity, faça o seguinte:
fonte