2016-03-08 3 views
0

J'ai utilisé un commutateur pour définir les notifications. Je veux enregistrer les notifications si le commutateur est coché, c'est-à-dire que la notification est activée.isChecked() renvoie la valeur true bien que le commutateur ne soit pas coché

Mais si je sur le commutateur et à nouveau sur le commutateur et enregistrer l'événement. Ensuite, la notification est également définie.

Comme j'ai fait le débogage sur if(isChecked() == true), il retourne vrai si je allume et éteint l'interrupteur une fois. Si je ne change pas l'état de switch, il retourne false.

Qu'est-ce qui ne va pas?

notify.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
            boolean isChecked) { 

      if (isChecked) { 

       linearSelectTime.setEnabled(true); 
       linearSelectTime.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         final AlertDialog.Builder builder = new AlertDialog.Builder(AddEventActivity.this); 

         int selected = 0; 

         builder.setSingleChoiceItems(R.array.time_array, selected, 
           new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int item) { 

             String[] time = getBaseContext().getResources().getStringArray(R.array.time_array); 

             notifyTime.setText(time[item]); 

             notificationTime = time[item]; 

             dialog.dismiss(); 
            } 
           }); 
         builder.show(); 
        } 

       }); 
      } else { 

       alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
       intent = new Intent(getApplicationContext(), NotificationReceiver.class); 
       pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), RQS_1, intent, 0); 
       alarmManager.cancel(pendingIntent); 

       notificationTime = ""; 
       notifyText.setVisibility(View.INVISIBLE); 
       linearSelectTime.setEnabled(false); 
      } 

     } 
    }); 

sur Enregistrer:

     if (notify.isChecked()) { 
          setNotificationTime(c); 

         } 

ce qui va mal ici.?

+0

-vous l'esprit pour retirer la barre de défilement horizontale de votre poste? – reporter

Répondre

3

OnCheckedChangeListener ne fonctionne pas correctement la plupart du temps. Tout d'abord mis OnClickListener sur votre case à cocher et que l'utilisation de la méthode isChecked à getValue de votre case comme celui-ci

checkBox.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    if (checkBox.isChecked()) 
    { 

    }else { 

    } 
    } 
    });