Neto, vou dar uma estudada nessa questão de Adapter como você aconselhou...
Qualquer duvida que eu tiver eu posto aqui.
Valeu
Em 15 de abril de 2012 22:59, Neto Marin <netomarin@gmail.com> escreveu:
Como eu disse, vc precisa dar uma estudada em como funciona o Adapter.Resumindo, é o seguinte, o método getView é executado para cada célula que vai ser renderizada. Mas para não sobrecarregar a memória, o Android cria só o número de views que cabem na tela. E então ele chama o método getView e passa a convertView que será utilizada para exibir os dados na tela.E essa convertView só é nula UMA vez, que é quando ela é criada pela primeira vez. Daí em diante, você poderia simplesmente atualizar o conteúdo dela, dai o padrão de uso do ViewHolder e sim, vale a pena usar o ViewHolder, de uma procurada sobre isso.Na sua lógica então, sempre que ele executa novamente o getView, como a convertView não é mais nula, vc simplesmente retorna ela como ela estava, ou seja, como ela foi gerada na primeira vez.Então no if (convertView == null) { ... vc deve inflar o layout e atribui-lo para para a convertView, e SEMPRE, vc vai atualizar os componentes do seu layout com a informação que você quer.Sobre a questão q vc pediu ajuda, é só vc ajustar a lógica. Armazene o estado original do checkbox e caso o cara clique no negativeButton vc volta ele pro estado anterior.[]sNeto---
Neto Marin
Blog: http://blog.netomarin.com
GTalk: netomarin@gmail.com
MSN: neto_marin@hotmail.com
Skype: netomarin
On Sun, Apr 15, 2012 at 9:50 PM, Luiz Gustavo Mafra <lgmafra@gmail.com> wrote:
Leonardo, eu tentei fazer isso, mas acaba dando erro...04-16 00:49:10.602: E/AndroidRuntime(19294): Uncaught handler: thread main exiting due to uncaught exception04-16 00:49:10.633: E/AndroidRuntime(19294): java.lang.NullPointerException04-16 00:49:10.633: E/AndroidRuntime(19294): at com.simpatico.sgf.ViewMovimentos$8.onClick(ViewMovimentos.java:448)04-16 00:49:10.633: E/AndroidRuntime(19294): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)04-16 00:49:10.633: E/AndroidRuntime(19294): at android.os.Handler.dispatchMessage(Handler.java:99)04-16 00:49:10.633: E/AndroidRuntime(19294): at android.os.Looper.loop(Looper.java:123)04-16 00:49:10.633: E/AndroidRuntime(19294): at android.app.ActivityThread.main(ActivityThread.java:4363)04-16 00:49:10.633: E/AndroidRuntime(19294): at java.lang.reflect.Method.invokeNative(Native Method)04-16 00:49:10.633: E/AndroidRuntime(19294): at java.lang.reflect.Method.invoke(Method.java:521)04-16 00:49:10.633: E/AndroidRuntime(19294): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)04-16 00:49:10.633: E/AndroidRuntime(19294): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)04-16 00:49:10.633: E/AndroidRuntime(19294): at dalvik.system.NativeStart.main(Native Method)Em 15 de abril de 2012 21:45, Leonardo Jobim <leo.jobim@gmail.com> escreveu:Não entendi muito bem o problema.Mas vc não tem como gravar em uma variável o estado original do checkbox e atribuí-lo no onClick() do negative Button ?Em 15 de abril de 2012 21:38, Luiz Gustavo Mafra <lgmafra@gmail.com> escreveu:
Deixa eu pedir também uma ajudinha em uma parte do getView em particular.Na getView eu tenho essa parte de códigochkQuitado.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {ViewMovimentos vm = new ViewMovimentos();if(isChecked){vm.marcaMovQuitado(Integer.parseInt(entry.getMovId()), "Deseja marcar este movimento como pago?", context, QUITAR_MOV);}else{vm.marcaMovQuitado(Integer.parseInt(entry.getMovId()), "Deseja marcar este movimento como á pagar?", context, DES_QUITAR_MOV);}}});Nessa parte eu chamo o métodopublic void marcaMovQuitado(final int movId, String msg, final Context context, final int marcaMov){AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setMessage(msg);builder.setPositiveButton("Sim", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {atualizaMov(context, movId, marcaMov);}});builder.setNegativeButton("Não", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});AlertDialog dialog = builder.create();dialog.setTitle("Aviso");dialog.show();}Nesse marcaMovQuitado vai ser criado um alertDialog com dois botões, setPositiveButton e setNegativeButton, a ação do positiveButton está funcionando tranquilo, só que no negativeButton eu quero que ao clicar o estado do checkBox seja o estado original, ou seja, se ele estava desmarcado e ao clicar ele vai ser marcado e vai abrir o alertDialog, se eu clicar no negativeButton, eu quero que ele volte ao estado desmarcado e vice versa.Já tentei de algumas formas fazer isso mas não consegui.Vocês teriam alguma sugestão??Att,Em 15 de abril de 2012 21:20, Luiz Gustavo Mafra <lgmafra@gmail.com> escreveu:
Neto, no caso se eu não fizer esse teste para ver se a view está errado??Em 15 de abril de 2012 21:18, Neto Marin <netomarin@gmail.com> escreveu:
Como eu tinha ditoVc só cria a view qnd ela não é nula e depois não atualiza ela nunca mais.De uma olhada em exemplos de Adapters. Vc precisa atualizar o conteúdo pois o Android reutiliza as views para exibir o conteúdo e assim não gastar memória desnecessariamente.[]sNeto
---
Neto Marin
Blog: http://blog.netomarin.com
GTalk: netomarin@gmail.com
MSN: neto_marin@hotmail.com
Skype: netomarin
On Sun, Apr 15, 2012 at 9:15 PM, Luiz Gustavo Mafra <lgmafra@gmail.com> wrote:
Olá, segue o meu getView()...public View getView(int position, View convertView, ViewGroup viewGroup) {final Movimentos entry = listMovimentos.get(position);if (convertView == null) {LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);convertView = inflater.inflate(R.layout.movimentos, null);TextView lancId = (TextView)convertView.findViewById(R.id.lancId);lancId.setText(entry.getLancId());TextView movId = (TextView)convertView.findViewById(R.id.movId);movId.setText(entry.getMovId());ImageView imgLancTipMov = (ImageView) convertView.findViewById(R.id.imgTipMov);imgLancTipMov.setImageResource(entry.getLancTipMov());TextView lancDescricao = (TextView) convertView.findViewById(R.id.lblLancDescricao);lancDescricao.setText(entry.getLancDescricao());TextView movDtaVencimento = (TextView) convertView.findViewById(R.id.lblMovDtaVencimento);movDtaVencimento.setText(entry.getMovDtaVencimento());TextView movValor = (TextView) convertView.findViewById(R.id.lblMovValor);movValor.setText(entry.getMovValor());movValor.setTextColor(entry.getCorMovValor());TextView movQtdParcela = (TextView) convertView.findViewById(R.id.lblMovQtdParcela);movQtdParcela.setText(entry.getMovParcela());CheckBox chkQuitado = (CheckBox)convertView.findViewById(R.id.chkQuitaMov);if(entry.getMovQuitado() == 1){chkQuitado.setChecked(false);}else if(entry.getMovQuitado() == 2){chkQuitado.setChecked(true);}chkQuitado.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {ViewMovimentos vm = new ViewMovimentos();if(isChecked){vm.marcaMovQuitado(Integer.parseInt(entry.getMovId()), "Deseja marcar este movimento como pago?", context, QUITAR_MOV);}else{vm.marcaMovQuitado(Integer.parseInt(entry.getMovId()), "Deseja marcar este movimento como á pagar?", context, DES_QUITAR_MOV);}}});}return convertView;}Em 15 de abril de 2012 21:08, Leonardo Jobim <leo.jobim@gmail.com> escreveu:Vc usa o padrão ViewHolder? Este ajuda a evitar este tipo de coisa.
Além disso vc está usando o position de getView() para obter o registro certo?
Se postar o código, ajuda. Senão vai ser adivinhação msm ....
Em 15/04/2012 21:04, "Luiz Gustavo Mafra" <lgmafra@gmail.com> escreveu:Boa noite a todos.Estou utilizando uma ListView em minha app que até o momento eu achava estar funcionando normalmente.Porém percebi a pouco que a cada 5 registros exibidos, a ListView começa a repetir os registros. Por exemplo:Se eu tiver (a,b,c,d,e,f,g,h,i,j) a ListView vai mostrar na seguinte ordem (a,b,c,d,e,a,b,c,d,e).Se tiver (a,b,c,d,e,f,g,h,i,j,k) a ListView vai mostrar na seguinte ordem (a,b,c,d,e,a,b,c,d,e,a).Já verifiquei a minha consulta rodando ela no Sqlite Expert e funciona tranquilamente, fiz o debug indo registro a registro e vai tudo ok, mas na hora de exibir é q esta o problema.Alguém poderia me ajudar??Att,--
Luiz Gustavo S. Mafra
Bacheralando em Ciência da Computação - UESCProgramador PHP, dotNet, AndroidSite: www.lgmafra.com.brtwitter: @lgmafraskype: lgmafra
--
Luiz Gustavo S. Mafra
Bacheralando em Ciência da Computação - UESCProgramador PHP, dotNet, AndroidSite: www.lgmafra.com.brtwitter: @lgmafraskype: lgmafra
--
Luiz Gustavo S. Mafra
Bacheralando em Ciência da Computação - UESCProgramador PHP, dotNet, AndroidSite: www.lgmafra.com.brtwitter: @lgmafraskype: lgmafra
--
Luiz Gustavo S. Mafra
Bacheralando em Ciência da Computação - UESCProgramador PHP, dotNet, AndroidSite: www.lgmafra.com.brtwitter: @lgmafraskype: lgmafra
--
Luiz Gustavo S. Mafra
Bacheralando em Ciência da Computação - UESCProgramador PHP, dotNet, AndroidSite: www.lgmafra.com.brtwitter: @lgmafraskype: lgmafra
--
Luiz Gustavo S. Mafra
Bacheralando em Ciência da Computação - UESC
Programador PHP, dotNet, Android
+55 73 8142 3045
Site: www.lgmafra.com.br
twitter: @lgmafra
skype: lgmafra






0 comentários:
Postar um comentário