Autore Topic: Problema con radiogroup in listview  (Letto 581 volte)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Problema con radiogroup in listview
« il: 06 Marzo 2012, 12:46:07 CET »
0
Salve ragazzi,ho una listView che al suo interno contiene un radiogroup con due radiobutton.Seguendo diversi tutorial sono arrivato a questa conclusione:
Codice (Java): [Seleziona]
radiogroup = (RadioGroup)findViewById(R.id.radioCheckList);
     
     ListView listadesc = (ListView) findViewById(R.id.listView1);
     
     Cursor cdesc = db.getDescrizioneCheckList(idcomponentecliccata);
     startManagingCursor(cdesc);
     
     CheckListCursorAdapter adapter = new CheckListCursorAdapter(CheckListActivity.this,cdesc);
     listadesc.setAdapter(adapter);
     

                 //Soluzione 1
//          
//              RadioGroup.OnCheckedChangeListener listener = new RadioGroup.OnCheckedChangeListener() {
//
//                      @Override
//                      public void onCheckedChanged(RadioGroup radiogroup, int checkedId) {
//
//                              if(checkedId == R.id.radioButtonSI){
//                                      Log.i("","Hai cliccato si");
//                              }else if(checkedId == R.id.radioButtonNO){
//                                      Log.i("","Hai cliccato no");
//                              }else{
//                                      Log.i("", "Source not correct. Check code!");
//                              }
//                             
//                      }
//
//              };
////             Registriamo l'ascoltatore al Radiogroup
//              radiogroup.setOnCheckedChangeListener(listener);

   
   // Soluzione 2
   radiogroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
   
   @Override
   public void onCheckedChanged(RadioGroup group, int checkedId) {
    if(group == radiogroup){
     switch (checkedId) {
     case R.id.radioButtonSI:
      Toast.makeText(CheckListActivity.this, "Hai cliccato su SI",
                          Toast.LENGTH_SHORT).show();
                  break;
     case R.id.radioButtonNO:
      Toast.makeText(CheckListActivity.this, "Hai cliccato su NO",
                          Toast.LENGTH_SHORT).show();
                  break;
     default:
                  break;
     }
    }
   
   }
  });

Per la soluzione 1 l'errore è il seguente:

Codice: [Seleziona]
03-06 11:38:14.481: E/AndroidRuntime(17887): FATAL EXCEPTION: main
03-06 11:38:14.481: E/AndroidRuntime(17887): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.magalditechno.Login/impianto.CheckListActivity}: java.lang.NullPointerException
03-06 11:38:14.481: E/AndroidRuntime(17887):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at android.os.Looper.loop(Looper.java:130)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at android.app.ActivityThread.main(ActivityThread.java:3683)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at java.lang.reflect.Method.invokeNative(Native Method)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at java.lang.reflect.Method.invoke(Method.java:507)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at dalvik.system.NativeStart.main(Native Method)
03-06 11:38:14.481: E/AndroidRuntime(17887): Caused by: java.lang.NullPointerException
03-06 11:38:14.481: E/AndroidRuntime(17887):         at impianto.CheckListActivity.onCreate(CheckListActivity.java:81)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-06 11:38:14.481: E/AndroidRuntime(17887):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-06 11:38:14.481: E/AndroidRuntime(17887):         ... 11 more

Sulla riga
Codice (Java): [Seleziona]
 radiogroup.setOnCheckedChangeListener(listener);
Mentre per la seconda soluzione l'errore è come quello precedente ma sulla riga:
Codice (Java): [Seleziona]
   radiogroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
Quindi sempre sul settaggio del listener,credo sia un mio errore.
Potete aiutarmi?Grazie anticipatamente per le eventuali risposte

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Re:Problema con radiogroup in listview
« Risposta #1 il: 06 Marzo 2012, 17:30:29 CET »
0
Risolto,posto la soluzione per chi ne avesse bisogno in futuro.Bisognava modificare l'adapter in questo modo:

Codice (Java): [Seleziona]
class CheckListCursorAdapter extends CursorAdapter {
 private LayoutInflater inflater;
 RadioGroup radiogroup;

 public CheckListCursorAdapter(Context context, Cursor c) {
  super(context, c);
  inflater = LayoutInflater.from(context);
 }

 @Override
 public void bindView(final View view, final Context context, Cursor cursor) {
 
        ((TextView) view.findViewById(R.id.textViewDescrizioneChecklist)).setText(
    cursor.getString(cursor.getColumnIndex(CheckList.Descrizione)));
 
    radiogroup = (RadioGroup)view.findViewById(R.id.radioCheckList);
        RadioGroup.OnCheckedChangeListener listener = new RadioGroup.OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(RadioGroup radiogroup, int checkedId) {

                        if(checkedId == R.id.radioButtonSI){
                                Toast.makeText(context, "Hai cliccato su SI",
                        Toast.LENGTH_SHORT).show();
                        }else if(checkedId == R.id.radioButtonNO){
                                Toast.makeText(context, "Hai cliccato su NO",
                        Toast.LENGTH_SHORT).show();

                        }else{
                                Log.i("", "Source not correct. Check code!");
                        }
                       
                }

        };
//       Registriamo l'ascoltatore al Radiogroup
        radiogroup.setOnCheckedChangeListener(listener);

 }

 @Override
 public View newView(final Context context, Cursor cursor, ViewGroup parent) {
  View v = inflater.inflate(R.layout.riga_checklist, null);
  return v;
 }
 
 
 public String getDescrizione(Cursor cursor){
  return cursor.getString(cursor.getColumnIndex("Descrizione"));
 }

}
« Ultima modifica: 06 Marzo 2012, 19:01:56 CET da dom4 »