3 ŞUBAT 2012, Cuma
Nasıl olsun Anahtarı ayırt edebilirim,Değeri kullanıcı veya program aracılığıyla değiştirildi (tutma dahil) Checkbox?
setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// How to check whether the checkbox/switch has been checked
// by user or it has been checked programatically ?
if (isNotSetByUser())
return;
handleSetbyUser();
}
});
Nasıl yöntem isNotSetByUser()
uygulamak için?
CEVAP
13 Ocak 2013, Pazar
Cevap 2:
Cevabı çok basit:
OnCheckedChangeListener yerine OnClickListener üzerinde kullanın
someCheckBox.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// you might keep a reference to the CheckBox to avoid this class cast
boolean checked = ((CheckBox)v).isChecked();
setSomeBoolean(checked);
}
});
Şimdi click olayları almak ve programlı değişiklikler hakkında endişelenmenize gerek yok.
Cevap 1:
Şifrelenmiş bir şekilde bu sorunu işleyen bir sarıcı sınıf (Dekoratör Desen) oluşturduk:
public class BetterCheckBox extends CheckBox {
private CompoundButton.OnCheckedChangeListener myListener = null;
private CheckBox myCheckBox;
public BetterCheckBox(Context context) {
super(context);
}
public BetterCheckBox(Context context, CheckBox checkBox) {
this(context);
this.myCheckBox = checkBox;
}
// assorted constructors here...
@Override
public void setOnCheckedChangeListener(
CompoundButton.OnCheckedChangeListener listener){
if(this.myListener == null)
this.myListener = listener;
myCheckBox.setOnCheckedChangeListener(listener);
}
public void silentlySetChecked(boolean checked){
toggleListener(false);
myCheckBox.setChecked(checked);
toggleListener(true);
}
private void toggleListener(boolean on){
if(on){
this.setOnCheckedChangeListener(myListener);
}
else
this.setOnCheckedChangeListener(null);
}
}
CheckBox hala XML aynı bildirilebilir, ama kod senin GUI başlatırken bunu kullanın:
BetterCheckBox myCheckBox;
// later...
myCheckBox = new BetterCheckBox(context,
(CheckBox) view.findViewById(R.id.my_check_box));
Eğer dinleyici tetiklemeden kodu kontrol edip ayarlamak istiyorsanız, setChecked
yerine myCheckBox.silentlySetChecked(someBoolean)
Ara.
Bunu Paylaş:
Nasıl (javascript) dizi değeri boş vey...
32-bit bir işlem olduğunu nasıl veya 6...
Nasıl bir dizi belirli bir değeri vars...
Uygulama nasıl olsun'in yolu s ed...
Nasıl URL parametre değeri olsun?...