2016-03-21 18 views
0

Java'ya yeniyim ve bunu nasıl yapacağımı bilmiyorum.setOnCheckedChangeListener onCreateView dışında

Ne o da kendi içinde oldukça olağan yeni Switch.OnCheckedChangeListener fakat onCreateView işlevi içinde olmadığını bu yüzden ben nasıl göstermeye çalıştık gibi SleepTimeReminderFragment sınıfta da kendi işlevine setOnCheckedChangeListener "dış kaynak" yapmak istediğim Bunun anlamı, bunun nasıl çalışması gerektiğini düşünüyorum, ama bu bana hatalar veriyor. Yani bu mümkün mü yoksa yanlış bir şey mi yaptım? Hata, @override ile olduğundan, bunu yapamayacağımı belirtiyor. Bkz. ###, 1), 2) ve 3).

public class SleepTimeReminderFragment extends Fragment { 

    // ### This 1) 
    Switch.OnCheckedChangeListener swEnSleepTimeReminderModOCCL; 

    public SleepTimeReminderFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_sleep_time_reminder, container, false); 

     Switch swEnSleepTimeReminderMod = (Switch) view.findViewById(R.id.swEnSleepTimeReminderMod); 
     swEnSleepTimeReminderMod.setOnCheckedChangeListener(swEnSleepTimeReminderModOCCL); 

     // ### function that I want to "outsource" 2) 
     /*swEnSleepTimeReminderMod.setOnCheckedChangeListener(new Switch.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked) { 
        // set all view items but this switch to enabled 
       } else { 
        // set all view items but this switch to not enabled 
       } 
      } 
     });*/ 

     // Inflate the layout for this fragment 
     return view; 
    } 

    // ### what I guessed this "outsourcing" would have to look like 3) 
    private Switch.OnCheckedChangeListener getSwEnSleepTimeReminderModOCCL() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       // set all view items but this switch to enabled 
      } else { 
       // set all view items but this switch to not enabled 
      } 
     } 
     return swEnSleepTimeReminderModOCCL; 
    } 
} 

cevap

0

olmayan bir anonim sınıfını kullanmak için bir anonim iç sınıf, sen gelmiş kullanmak istemiyorsanız sen do eğer, o o (bizim örneğimizde MyListener olarak) bir isim sahip olması demektir .

Ayrıca bir noktada bir new örneği oluşturmanız gerekir (bunu yapıcıda yaptım, ancak kullanımdan önce herhangi bir yerde olabilir).

Örnek:

public class SleepTimeReminderFragment extends Fragment { 

    Switch.OnCheckedChangeListener swEnSleepTimeReminderModOCCL; 

    public SleepTimeReminderFragment() { 
     swEnSleepTimeReminderModOCCL = new MyListener(); 
    } 

    //omitted onCreate 

    private class MyListener implements Switch.OnCheckedChangeListener { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       // set all view items but this switch to enabled 
      } else { 
       // set all view items but this switch to not enabled 
      } 
     } 
    } 
} 

Sidenote: Java 8 kullanıyorsanız, sadece setOnCheckedChangeListener bir yöntem başvuru geçebilir. Bu mesajın zamanında android sadece deneysel Java 8 desteğine sahiptir.

+0

teşekkür ederiz yöntemini CompoundButton.OnCheckedChangeListener arabirimini uygulayan ve geçersiz kılmak gerekir, bu sadece 'swEnSleepTimeReminderModOCCL dönmek, gayet iyi çalışıyor;' silinmelidir . – Andimanos

+0

Bunu düzenledim .. – F43nd1r

0

Switch için dinleyici işlevini "fason" için, sınıf onCheckedChanged()

public class SleepTimeReminderFragment extends Fragment 
    implements CompoundButton.OnCheckedChangeListener{ //implement interface here 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     //do your stuff here 
     swEnSleepTimeReminderMod.setOnCheckedChangedListener(SleepTimeReminderFragment.this); 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      // set all view items but this switch to enabled 
     } else { 
      // set all view items but this switch to not enabled 
     } 
    } 
} 
+0

Bu çözüm de çalışıyor, teşekkürler. – Andimanos

İlgili konular