2013-01-06 73 views
7

我正在將號碼選取器集成到我的應用程序中。該活動顯示每個都帶有號碼選取器的項目列表。用戶可以使用數字選擇器來增加或減少數量。當他們這樣做時,我想更新顯示價格的TextView。將聽衆添加到號碼選取器小部件

試圖達到此目的時遇到了困難。我做了一個簡單的項目,並嘗試嘗試顯示一個吐司消息,當用戶點擊小部件但無濟於事。

我的猜測是,數字小部件不被視爲一個按鈕,因此點擊偵聽器不起作用?我將不勝感激任何有關添加偵聽器的建議。

下面是我的代碼:

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

你可能需要做'np.setClickable(真)'如果你想要的是單擊事件。但是,如果您想監聽號碼更改,爲什麼不使用[OnValueChangeListener](http://developer.android.com/reference/android/widget/NumberPicker.OnValueChangeListener.html)? –

回答

14

要使用Picker設置偵聽器,您的活動必須實現拾取器接口偵聽器。 (實際上,你的活動是不是強制性的,以實現該接口,也可以用匿名的內部方法無論工作。)

因此,在你的活動:

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

現貨!非常清楚並且很好地解釋了答案,謝謝! – Javacadabra

+0

歡迎您:) – Zyoo

+0

這不適用於一個片段嗎? – timberlake

9

對於較新的Android開發(比如我) ,活動本身不是實現偵聽器所需。它只需要傳入setOnValueChangedListener()

這有助於避免過多implements和太多重疊@Overrides

例子:

// 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

它的工作......謝謝你;) – deanpodgornik