Tenho em minha Activity principal todos os dados necessários para preencher manualmente a ListView que tenho em outra Activity, mas não consigo preenchê-la depois de muito pesquisar.
Tenho que mostrar as descrições e seus respectivos valores, devidamente formatados, um alinhado à esquerda e o outro à direita…
Salvar esses valores como Static e depois recuperá-los não seria uma alternativa?
ideiainformatica
A quem possa me dar uma dica:
Já consegui transferir um ArrayList de uma Activity para outra com as informações para preenchimento de uma ListView, mas estou com dificuldades em apresentá-las.
Os diversos exemplos que encontrei no Google não deram certo e algumas são até conflitantes.
Qual o processo ideal de copiar estes dados para a tela?
fabriciov
1- Cria um Layout com o que cada linha da ListView vai ter (ImageView, TextView, CheckBox, etc)
2- Cria uma classe que herda BaseAdapter
3- Implementa os metodos requeridos do BaseAdapter, passe e extraia os dados da lista que vc passou para essa nova activity.
4- Na Activity instancie a classe que herda BaseAdaper e o envie para a listView (.setAdapter(Object))
Qual desses tópicos esta o problema ?
Marky.Vasconcelos
Nunca caia na tentação de usar static, no caso de activities, voce pode até vazar o contexto e ter grandes problemas de memoria.
O ideal é passar um List dentro do Bundle com algum objeto de modelo que voce tenha criado que implemente Parcelable.
Para exibir, siga o que o fabriciov postou.
ideiainformatica
Já tenho o conteúdo na segunda Activity (mostro na Log sem problemas), mas os comandos que encontrei no Google não fui feliz, cada um de um jeito e sem resultado, estou perdido.
Falta mover o conteúdo para a tela.
Parei com o seguinte:
packagebr.ideiainformatica.idepagpro;importandroid.app.Activity;//import android.app.AlertDialog;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.ListView;importandroid.widget.TextView;importandroid.widget.ArrayAdapter;//import android.app.ListActivity;importjava.util.ArrayList;importandroid.widget.Adapter;importandroid.util.Log;publicclassCalculadoextendsActivity{ListViewdescri;TextViewtitulo;TextViewrodape;//private ArrayList<ItemLista> mLista;// = new ArrayList<ItemLista>();publicclassCalculos{//extends ArrayAdapter<Calculos> {privateStringdescricao;privateDoublevalor;publicCalculos(Stringdescricao,Doublevalor){this.descricao=descricao;this.valor=valor;}publicDoublegetValor(){returnvalor;}publicvoidsetValor(Doublevalor){this.valor=valor;}publicStringgetDescricao(){returndescricao;}publicvoidsetNome(Stringdescricao){this.descricao=descricao;}}@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.calculado);Intentintent=getIntent();Bundleparams=intent.getExtras();ArrayList<ItemLista>mLista=(ArrayList<ItemLista>)getIntent().getSerializableExtra("mLista");descri=(ListView)findViewById(R.id.descri);//Calculos Calculo = new Calculos(this, mLista);//descri.setAdapter(Calculo);//String desc = "";//Double valo = 0.00;//this.setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, mLista));for(inti=1;i<mLista.size()-1;i++){Log.i(mLista.get(i).getDescricao(),String.format("%.2f",mLista.get(i).getValor()));}rodape.setText(mLista.get(mLista.size()).getDescricao()+" "+String.format("%.2f",mLista.get(mLista.size()).getValor()));titulo.setText(mLista.get(0).getDescricao());ArrayAdapterArray1=newArrayAdapter(this,android.R.layout.simple_list_item_1,mLista);setListAdapter(Array1);}privatevoidsetListAdapter(ArrayAdapterarray1){// TODO Auto-generated method stub}}
fabriciov
tenho um pequeno exemplo que tinha feito para um amigo.
Uma listview sobre um relativeLayout.
cada item da listview tem um checkbox(que ao clicar muda cor de um textview) e textview (que ao clicar dispara um listener que cria um alertDialog).
Acostume-se a deixar seu código sempre legível, deixa as Activity apenas para controle de UI.
ideiainformatica
Obrigado pelas dicas, Fabrício.
Tentei usar os comandos abaixo, retirados do seu exemplo:
publicclassCalculadoextendsActivity{ListViewdescri;TextViewtitulo;TextViewrodape;//private ArrayList<ItemLista> mLista;// = new ArrayList<ItemLista>();publicclassCalculos{//extends ArrayAdapter<Calculos> {privateStringdescricao;privateDoublevalor;publicCalculos(Stringdescricao,Doublevalor){this.descricao=descricao;this.valor=valor;}publicDoublegetValor(){returnvalor;}publicvoidsetValor(Doublevalor){this.valor=valor;}publicStringgetDescricao(){returndescricao;}publicvoidsetNome(Stringdescricao){this.descricao=descricao;}}@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.calculado);ArrayList<ItemLista>mLista=(ArrayList<ItemLista>)getIntent().getSerializableExtra("mLista");descri=(ListView)findViewById(R.id.descri);titulo=(TextView)findViewById(R.id.titulo);rodape=(TextView)findViewById(R.id.rodape);ListAdapteradapter=newListAdapter(mLista,this);descri.setAdapter(adapter);}}
mas ocorre o erro “cannot instantiate the type ListAdapter” na linha do ListAdapter, cuja solução não consegui.
Tem também:
importandroid.widget.ListAdapter;
fabriciov
Esse ListAdapter é uma classe que herda BaseAdapter né ?
Mude o nome(MyAdapter, CustomAdapter, use a imaginação) , pq nativamente no pacote widget ja existe uma classe chamada ListAdapter… ai da conflito
Edit:
e outra coisa, vi que você esta passando um “this” na ListAdapter, apenas faça isso caso esteja implementando algum callback.
Sua MainActivity não esta implementando nenhuma interface, então, para evitar consumo desnecessário de memoria não passe esse parâmetro