[ANDROID] Tentando atualizando lista após alteração

12 respostas
D

Galera blz?

To com um problema aqui se é o seguinte.

Tenho uma lista com meus contribuintes, e ao clicar em cima de um eu abro uma tela onde eu altero algumas informações dele, ate ai tudo bem. Mas qndo edito o meu contribuinte e clico na seta voltar eu precisava que ele mostrasse a lista com o nome em vermelho, aqui ele mostra a lista com as informações desatualizadas. Eu ate consigo fazer "atualizar" mas da maneira errada, pq na vdd eu chamo a activity e ele carrega a lista novamente, e isso gera uma demora. Sera que alguem pode me ajudar a fazer isso? Desculpa a minha ignorancia no assunto pessoal, é que sou novo e não tenho muito conhecimento.

Segue meu metodo que carrega a lista e envia para o basedapter:
public void mostraLista() {

        aguaApp = (AguaApp) getApplication();
        contribuintelista = new ArrayList<ContribuinteJson>();
        enderecolista = new ArrayList<Endereco>();

        contribuintelista = aguaApp.getDataManager().buscaContribuinte();
        enderecolista = aguaApp.getDataManager().getEnderecoList();

        setListAdapter(new ContribuinteAdapter(this, contribuintelista,
                enderecolista));

    }

Meu adapter:

public View getView(int arg0, View arg1, ViewGroup arg2) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.modelo_arrow, null);

        txtNome = (TextView) view.findViewById(R.id.tvNomePro);
        txtEndereco = (TextView) view.findViewById(R.id.tvEndPro);

        try {
            
            for (int x = 0; x < enderecolista.size(); x++) {
                
                if (enderecolista.get(x).getCodigo() == contribuintes.get(arg0).getCod_endereco()) {

                    if (contribuintes.get(arg0).getAno() == 0) {

                        txtNome.setText(contribuintes.get(arg0).getNome_proprietario());
                        txtEndereco.setText(enderecolista.get(x).getNome());

                    } else {

                        txtNome.setText(contribuintes.get(arg0).getNome_proprietario());
                        txtEndereco.setText(enderecolista.get(x).getNome());

                        txtNome.setTextColor(Color.RED);
                        txtEndereco.setTextColor(Color.RED);
                    }
                }
            }

        } catch (Exception e) {
            System.out.println("Erro: " + e.getMessage());
            e.printStackTrace();
        }

        return view;
    }

Bom pessoal se alguem puder me ajudar fico muito agradecido, abraços.

12 Respostas

B

douglascst90 eu estava com o mesmo problema, a solução que eu fiz foi criar uma classe com Listas publicas e static, e cada vez que eu alterava algum componente da lista eu atualizada dando setAdapter de novo com o mesmo adapter, foi um metodo que eu usei e q não estou tendo problemas até o momento

D

Hum, a classe que vc diz foi a que estende baseadapter? Não entendi muito bem, sem querer abusar, teria como vc me mostra como vc fez? Obrigado pela ajuda. :slight_smile:

R

oi douglascst90,
não sei como esta o seu cenario, porém vc está estendendo ListActivity para mostrar a lista?

em uma app minha fiz da seguinte forma:

@Override
	protected void onResume() {
		super.onResume();
		mostraLista();
	}

quando eu editava o item do listActivity, ao voltar pra lista a activity chama o onResume, que faz parte do ciclo de vida da activity, então fiz o tratament para ele fazer essa atualização da lista, e funcionou perfeito ( Para meu cenario ).

B

deixa eu ver se o seu problema é o mesmo que o meu, Voce abre uma activity, nessa activity voce clica em um item da lista e abre outra tela, e nessa tela voce define alguns parametro salva e quer que esse parametro sejão atualizado na activity anterior isso

R

bruno.sbrunoro:
deixa eu ver se o seu problema é o mesmo que o meu, Voce abre uma activity, nessa activity voce clica em um item da lista e abre outra tela, e nessa tela voce define alguns parametro salva e quer que esse parametro sejão atualizado na activity anterior isso

no método onResume() da Activity onde contém a lista, você chama o metodo que preenche a lista novamente. e seu problema está resolvido.

D

ricardobras, obrigado até consegui fazer, mas o único problema é que, minha lista contem qse 2000 registro, e pra ela carregar demora um tempo não muito interessante. Essa lentidão é decorrente por ter muito registro ou não poderia que demorar assim, leva em torno de 40segundo pra carregar a lista.

D

bruno.sbrunoro:
deixa eu ver se o seu problema é o mesmo que o meu, Voce abre uma activity, nessa activity voce clica em um item da lista e abre outra tela, e nessa tela voce define alguns parametro salva e quer que esse parametro sejão atualizado na activity anterior isso

é exatamente isso msm, so que a unica diferença é que na minha lista quando eu faço uma alteração e chamo a lista novamente a cor do texto do contribuinte editado fica vermelho, ate ai td ok. Mas como eu disse, eu tenho que carregar a toda a lista novamente e isso causa uma certa demora.

B

O meu a lista tambem é bem grande entao eu so gero a lista uma vez e depois eu so modifico o que eu quero , dai eu tenho uma classe chamada Listas que ta mais ou menos assim

...
...
public static List&lt;Pessoa&gt; = new ArrayList&lt;Pessoa&gt;();
.....
....

foi um metodo para eu evitar de ficar fazendo busca no banco para melhorar no desempenho alem de manipular em qual quer classe

D

Não entendi muito bem.

Como vc altera na lista so o que voce quer, se no momento em que eu vou carregar a lista eu passo uma lista populada e assim ele preenche conforme essa lista. Nao entendi como ele atualiza so que voce quer.

B

assim

Classe Listas

public class Listas {

         public static List&lt;Pessoa&gt; = new ArrayList&lt;Pessoa&gt;();

}

ai na minha activity que eu gero a lista a partir do banco eu crio um objeto Pessoa

Pessoa temp = new Pessoa();
Listas.pessoas.add(temp);

ai por exemplo eu quero adicionar o telefone da pessoa

SUA_LIST_VIEW.setOnItemClickListener(new AdapterView.OnItemClickListener() {
	public void onItemClick(AdapterView&lt;?&gt; parent,View view,int posicao,long id){
                Pessoa temp = Listas.pessoa.get(posicao);
                temp.setTelefone(12344321);
                Lista.pessoa.set(posicao,temp);
        }
});

se precisar remover é

Listas.pessoa.remove(posicao);
D

bruno, qndo vc carrega sua lista pela primeira vez, que faz a consulta no banco e popula ela demora qnto tempo mais ou menos? Vc deixa ela executar e executa alguma thread ou vc deixa ela carregar direto?

B

e executo um thread que so vai continuar a activity quanto essa thread chegar ao final ela demora 1 minuto para preencher 1000 linhas

Criado 11 de julho de 2012
Ultima resposta 12 de jul. de 2012
Respostas 12
Participantes 3