2013-01-06 15 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(true)を行う必要があります。ただし、番号の変更をリスニングする場合は、[OnValueChangeListener](http://developer.android.com/reference/android/widget/NumberPicker.OnValueChangeListener.html)を使用しないでください。 –

答えて

14

ためsetOnValueChangedListenerを設定する方法このexampleを参照してくださいNumberPicker

の現在の値の変化に通知するNumberPicker.setOnValueChangedListenerを設定する必要がありますリスナーをPickerに設定すると、アクティビティはピッカー・インターフェース・リスナーを実装する必要があります。 (実際には、あなたの活動は、インターフェイスを実装するために必須ではありませんが、あなたはまた、匿名の内部メソッドを使用することができ働くものは何でも。。)

だからあなたの活動中:(私のような)新しいAndroidの開発者にとっては

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!非常に明確でよく説明された答え、ありがとう! – Javacadabra

+0

あなたの歓迎:) – Zyoo

+0

これはフラグメントでは機能しませんか? – timberlake

2

あなたは私たちがNumberPicker

+0

リンクがうまく動かない – timberlake

9

リスナーの実装には、アクティビティ自体ではありません。それはただ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

関連する問題