2013-01-06 15 views
7

Bir numara seçiciyi uygulamamda tümleştirmeye çalışıyorum. Etkinlik, her biri sayı seçiciye sahip öğelerin bir listesini görüntüler. Kullanıcı, sayı seçiciyi kullanarak miktarı artırabilir veya azaltabilir. Bunu yaparken fiyatı gösteren bir TextView güncellemek istiyorum. Bunu başarmaya çalışırken zorluk yaşadım. Basit bir proje hazırladım ve kullanıcı widget'ı tıkladığında, ancak boşuna hiçbir şey yapmadığında tost mesajını denemeye ve görüntülemeye çalıştım.Bir numara seçici tanıtıcısına bir dinleyici ekleme

Tahminimce, sayı widget'ı bir düğme dinleyicisi gibi davranılmıyor, bu yüzden bir tıklama dinleyicisi çalışmıyor mu? Bir dinleyici eklemeyle ilgili her türlü tavsiyeyi takdir ediyorum.

NumberPicker np; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    np = (NumberPicker)findViewById(R.id.numberPicker1); 
    np.setMaxValue(99); 
    np.setMinValue(0); 
    np.setValue(50); 

    np.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Toast.makeText(v.getContext(), "Number selected", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
+2

'(doğru) np.setClickable' istediğiniz tüm olayları tıklayın eğer. Ancak, bir sayı değişikliği dinlemek istiyorsanız, neden [OnValueChangeListener] (http://developer.android.com/reference/android/widget/NumberPicker.OnValueChangeListener.html) kullanmayın? –

cevap

14

için bkz NumberPicker

bugünkü değerindeki değişime haberdar etmek NumberPicker.setOnValueChangedListener ayarlamak gerekir: Aşağıda

benim kodudur Picker ile dinleyiciyi ayarlayın, etkinliğiniz seçici arabirim dinleyicisini uygulamalıdır. (Aslında, etkinlik ayrıca anonim iç yöntemi kullanabilirsiniz, arabirimini uygulamak zorunlu değildir çalışır neyse..) Etkinlik Yani

: (benim gibi) yeni bir Android geliştiriciler için

public class MainActivity extends Activity implements NumberPicker.OnValueChangeListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     NumberPicker np = (NumberPicker)findViewById(R.id.numberPicker1); 
     np.setMaxValue(99); 
     np.setMinValue(0); 
     np.setValue(50); 
     np.setOnValueChangedListener(this); 

    } 

    public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 
     Toast.makeText(this, "change", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

Spot on! Çok açık ve iyi açıklanmış bir cevap, teşekkür ederim! – Javacadabra

+0

hoş geldiniz :) – Zyoo

+0

Bu bir parça ile çalışmıyor mu? – timberlake

2

bu example biz NumberPicker

için setOnValueChangedListener set nasıl
+0

Link çalışmıyor aymore – timberlake

9

Aktivitenin kendisini dinleyiciyi uygulamak için gerekli olan değildir. Sadece setOnValueChangedListener()'a geçirilmesi gerekiyor.

Bu, çok fazla implements ve çok fazla örtüşen @Overrides'un önlenmesine yardımcı olur.

Örnek: yapmak gerekebilir

// Number Picker 
NumberPicker np = (NumberPicker) getView().findViewById(R.id.numberPicker1); 
np.setMinValue(0); 
np.setMaxValue(35); 

np.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { 
    @Override 
    public void onValueChange(NumberPicker numberPicker, int i, int i2) { 

     Toast.makeText(this, "Value was: " + Integer.toString(i) + " is now: " + Integer.toString(i2), Toast.LENGTH_SHORT).show(); 

    } 
}); 
+0

Çalışıyor ... teşekkür ederim;) – deanpodgornik