Olá, pessoal!
Estou fazendo um programa para Android e eu preciso listar um certo conteúdo na tela durante um looping. O problema é que são várias linhas e eu queria adicioná-las aos poucos pra não parecer que está lento, mas o Android somente chama o método invalidade() no final do looping.
Segue meu código:
Handler handler = new Handler();
for (Produto produto : listProdutos) {
TableRow itemRow = new TableRow(PedidoListaFrame.this);
TextView descricao = new TextView(this);
descricao.setText(produto.toString());
itemRow.addView(descricao);
itemRow.addView(new EditText(this), rowLayoutParams);
tableLayout.addView(itemRow);
if (++cont % 10 == 0) {
handler.postDelayed(new Runnable() {
public void run() {
subcategoriasLayout.invalidate();
}
}, 10);
}
}
subcategoriasLayout.addView(tableLayout);
subcategoriasLayout.invalidate();
Obrigada
O componente só vai executar o invalidate quando a UI Thread estiver ociosa (depois que ele terminar seu metodo).
Voce precisa fazer o processamento em outra Thread, mas dai vem o incoveniente que as Views precisam ser criadas no Runnable que rodará no Handler.
[quote=Marky.Vasconcelos]O componente só vai executar o invalidate quando a UI Thread estiver ociosa (depois que ele terminar seu metodo).
Voce precisa fazer o processamento em outra Thread, mas dai vem o incoveniente que as Views precisam ser criadas no Runnable que rodará no Handler.[/quote]
Eu já fiz tanta coisa aqui, que eu não estou conseguindo pensar em como fazer isso. Dá um exemplo, por fv.
Obrigada
Algo assim:
Handler handler = new Handler();
for (Produto produto : listProdutos) {
handler.postDelayed(new Runnable() {
public void run() {
TableRow itemRow = new TableRow(PedidoListaFrame.this);
TextView descricao = new TextView(this);
descricao.setText(produto.toString());
itemRow.addView(descricao);
itemRow.addView(new EditText(this), rowLayoutParams);
tableLayout.addView(itemRow);
}
}, ++cont * 10);
}
subcategoriasLayout.addView(tableLayout);
subcategoriasLayout.invalidate();
O que eu postei não faz muito sentido mesmo.
O ideal é realizar esses processos em uma Thread (ASyncTask por exemplo) e sincronizar com a UI via Handler.