Android: ListView com EditText e RadioButton

Olá pessoal sou iniciante em Java, já desenvolvo em outras linguagens, estou desenvolvendo um sistema para tablet, e estou com dificuldades para trabalhar com o ListView; meu ListView tem 2 RadioGroup e 1 EditText, carrego os dados do Banco SqlLite, bom até ai tudo bem, eu carrego a lista com os windgets e com os dados que quero normalmente, também consigo selecionar os RadioButton e escrever nos EditText, minha grande dificuldade esta na hora de ler essa lista para poder salvar no banco. Eu preciso ler a lista passando posição por posição e em cada posição pegar os valores dos RadioGroup e EditText, alguém poderia me socorrer. Desde de já meu muito obrigado.

Adiciona uma tag ao radiogroup com a posição dele no metodo getView do custom adapter

e implementa o onChange dele

[code] viewHolder.radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(View view, int checkedId)
{
int position = view.getTag(); //posição do ratiogroup na listview

        switch (checkedId){

            case R.id.check1:
                //doSomething
                break;

                case R.id.check2:
                    //doSomething
                break;

        }   




    }   
}

[/code]

moar info: http://stackoverflow.com/questions/11625990/listview-with-radiogroup-in-each-row

Obrigado pela ajuda, mas, está dando erro de NullPointerException quando acesso o viewHolder.radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() e não estou conseguindo identificar o porque, poderia me ajudar? veja meu codigo:

package br.com.ated.proj_sigmass_v01.fragment;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
import br.com.ated.proj_sigmass_v01.Constantes;
import br.com.ated.proj_sigmass_v01.MAdapter;
import br.com.ated.proj_sigmass_v01.R;
import br.com.ated.proj_sigmass_v01.dao.BaseDados;
import br.com.ated.proj_sigmass_v01.entity.Audit_Itens_List;
import br.com.ated.proj_sigmass_v01.entity.ItensTitulo;

public class Lista_ItensTitulo extends Fragment {

private BaseDados dao;
private SimpleCursorAdapter adapter;
private ListView listView;
private ArrayList<Audit_Itens_List> iItensTitulos;       
    private Cursor contatos;
    private ArrayList<Audit_Itens_List> mSource;
    private int posicao;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {

	View view = inflater.inflate(R.layout.lista_itens,container, false);
   	return view;
 
}
    
@Override
public void onStart(){
	super.onStart();		
	
	listView = (ListView) getActivity().findViewById(R.id.listView2);
	
	dao = new BaseDados(getActivity());	

	listarItensPorTitulo(getArguments());
	
}

private ArrayList<Audit_Itens_List> listarItensTitulo(int id) {

	iItensTitulos = new ArrayList<Audit_Itens_List>();
	
	List<ItensTitulo> listaItensTitulos = dao.buscarItensTituloPorCod_titulo(id);
    int nid = 0;
    
	for (ItensTitulo Itenstitulo : listaItensTitulos) {

		iItensTitulos.add(new Audit_Itens_List(nid,Itenstitulo.getCod_titulo(),Itenstitulo.getId(),Itenstitulo.getDescricao(),false,false,false,"",false,false,false,false,false));
        nid ++;

	}
	return iItensTitulos;
}


public void listarItensPorTitulo(Bundle bundle){

	if(bundle != null && bundle.containsKey(Constantes.TITULO_SELECIONADO)){
  
		    Long myID = bundle.getLong(Constantes.TITULO_SELECIONADO);
			String campos[] = {"descricao", "_id"};
			
			listView.setAdapter(new MAdapter(getActivity(),listarItensTitulo(myID.intValue())));

	}
	}

}


package br.com.ated.proj_sigmass_v01;

import java.util.ArrayList;
import br.com.ated.proj_sigmass_v01.entity.Audit_Itens_List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class MAdapter extends ArrayAdapter<Audit_Itens_List> {

private ArrayList<Audit_Itens_List> mSource;

	class ViewHolder{
		
		RadioGroup rgGroup1;
		RadioButton rb_c;
		RadioButton rb_nc;
		RadioButton rb_na;
		

		RadioGroup rgGroup2;
		RadioButton rb_fat;
		RadioButton rb_lti;
		RadioButton rb_itr;
		RadioButton rb_itm;
		RadioButton rb_ipa;
		
		
		TextView tv_questao; 
        TextView  tv_consideracoes;
		EditText et_consideracoes;
        
		
	}
	
	
	
   private LayoutInflater mInflater;	
   	

   public MAdapter(Context context, ArrayList<Audit_Itens_List> mSource) {
		super(context, R.layout.lista_itens_dados, mSource);
		mInflater = LayoutInflater.from(context);
		
		
	}

	
   
	public View getView(final int position, View convertView, ViewGroup parent) {
    	ViewHolder holder;
    	holder = new ViewHolder();
        
        
        if (convertView == null){
    		
    		convertView = mInflater.inflate(R.layout.lista_itens_dados, null);
    		
    		
    		
    		holder.tv_questao  = (TextView) convertView.findViewById(R.id.tv_questao); 
    		holder.tv_consideracoes   = (TextView) convertView.findViewById(R.id.tv_consideracoes);
	        holder.et_consideracoes = (EditText) convertView.findViewById(R.id.et_consideracoes);
	      
	        holder.rb_c  = (RadioButton) convertView.findViewById(R.id.rb_c); 
	        holder.rb_nc  = (RadioButton) convertView.findViewById(R.id.rb_nc);
	        holder.rb_na  = (RadioButton) convertView.findViewById(R.id.rb_na);

	        holder.rb_fat  = (RadioButton) convertView.findViewById(R.id.rb_fat); 
	        holder.rb_lti  = (RadioButton) convertView.findViewById(R.id.rb_lti);
	        holder.rb_itr  = (RadioButton) convertView.findViewById(R.id.rb_itr);
	        holder.rb_itm  = (RadioButton) convertView.findViewById(R.id.rb_itm); 
	        holder.rb_ipa  = (RadioButton) convertView.findViewById(R.id.rb_ipa);
   		
        	
    	}
    	else {
    		
    		holder =(ViewHolder) convertView.getTag();
    		
    	}
	
    	
    	holder.rgGroup1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				
				switch (checkedId) {
				case R.id.rb_c:
			         mSource.get(position).setC(true);
			         mSource.get(position).setNc(false);
			         mSource.get(position).setNa(false);
			         
					break;
				case R.id.rb_nc:
			         mSource.get(position).setC(false);
			         mSource.get(position).setNc(true);
			         mSource.get(position).setNa(false);
					
					break;
				case R.id.rb_na:
			         mSource.get(position).setC(false);
			         mSource.get(position).setNc(false);
			         mSource.get(position).setNa(true);
					
					break;

				
				}
			}
		});
    	
        
		
    	holder.rgGroup2.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				
				switch (checkedId) {
				case R.id.rb_fat:
			         mSource.get(position).setFac(false);
			         mSource.get(position).setMtc(false);
			         mSource.get(position).setRwc(false);
			         mSource.get(position).setLta(false);
			         mSource.get(position).setFat(true);
	
					break;
				case R.id.rb_lti:
			         mSource.get(position).setFac(false);
			         mSource.get(position).setMtc(false);
			         mSource.get(position).setRwc(false);
			         mSource.get(position).setLta(true);
			         mSource.get(position).setFat(false);
					
					break;
				case R.id.rb_itr:
			         mSource.get(position).setFac(false);
			         mSource.get(position).setMtc(false);
			         mSource.get(position).setRwc(true);
			         mSource.get(position).setLta(false);
			         mSource.get(position).setFat(false);
					
					break;
				case R.id.rb_itm:
			         mSource.get(position).setFac(false);
			         mSource.get(position).setMtc(true);
			         mSource.get(position).setRwc(false);
			         mSource.get(position).setLta(false);
			         mSource.get(position).setFat(false);
					
					break;
				case R.id.rb_ipa:
			         mSource.get(position).setFac(true);
			         mSource.get(position).setMtc(false);
			         mSource.get(position).setRwc(false);
			         mSource.get(position).setLta(false);
			         mSource.get(position).setFat(false);
					
					break;

				
				}
			}
		});

    	
    return convertView;	
    }
}

Pelo que vi o Radiogroup não foi referenciado a nada (objto null)

// Isso vai pegar o Radiogroup RadioGroup radioGroup = (RadioGroup)findViewById(r.id.radioGroup1);

Era isso mesmo, to olhando esse código a horas e não vi isso, (me falta experiência rsrsrs) obrigado novamente. porem sem querer te explorar, meu código acrescentando as 2 linhas que faltavam ficou assim:

if (convertView == null){
convertView = mInflater.inflate(R.layout.lista_itens_dados, null);

    holder.rgGroup1 = (RadioGroup) convertView.findViewById(R.id.rggParte1);
    holder.rgGroup2 = (RadioGroup) convertView.findViewById(R.id.rggParte2); 

… continuação do código

    return convertView;	
    }

mas da pau no return convertView;

Tem idei do que pode ser?

Esqueci de comentar: se eu comentar os 2 holder.rgGroup1.setOnCheckedChangeListener(new OnCheckedChangeListener() { …

ela passa normalmente e monta minha lista …

Por enquanto não vi nada, então faz 2 coisas:

  1. Coloca a exception
  2. use tags Code como fiz no comentário anterior

Mudei o foco, meu cliente tem pressa então resolvi parar de tentar, ajustar a lista, fiz de uma outra forma,(gravando um a um). Obrigado!