[RESOLVIDO] ANDROID - Adicionar elementos à tela dinamicamente durante um looping

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();

Olá Marky!

Não consegui resolver da maneira que vc disse, mas consegui usando AsyncTask:
http://www.guj.com.br/java/263166-resolvidoreceber-string-via-socket
http://stackoverflow.com/questions/8953308/android-add-elements-to-screen-dynamically-during-a-loop/
http://developer.android.com/reference/android/os/AsyncTask.html

Obrigada

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.