ユーザーが番号ピッカーウィジェット内の値を変更したときに、TextViewに表示される値を更新しようとしています。
番号ピッカーを設定して正しく機能していますが、TextViewの.setText()メソッドを呼び出そうとすると、次のエラーが発生します。
com.example.waitron5.MenuItemArrayAdapter.onValueChange(MenuItemArrayAdapter.java:68)でのjava.lang.NullPointerException
以下は、MenuItemArrayAdapterクラスでエラーが発生していると思われる場所に対応するコードです。
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
Toast.makeText(this.getContext(), "Change: " + picker.getValue(), Toast.LENGTH_SHORT).show();
//if oldVal > newVal increment price
price.setText("xyz");
//if oldVal < newVal decrement price
}
トーストメッセージは、リスナーが正しく機能していることをテストするために入力されました。次に、setText()メソッドを追加しましたが、エラーが発生しました。
この問題に関する助けをいただければ幸いです。MenuItemArrayAdapterクラスの先頭でTextViewを宣言します。
private TextView price;
注:番号ピッカーは、リストの各ビューに含まれています。これが、MenuItemAdapterクラスがある理由です。問題は、間違った場所からtextViewを更新しようとしたことに関連している可能性がありますか?
以下は、MenuItemAdapterクラスのgetView()メソッドです。
public View getView(final int position, View convertView, ViewGroup parent){
View v = convertView;
if(v == null){
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.menuitem_row, null);
}
//assign values to view
MenuItem item = this.menuItems.get(position);
TextView nameView = (TextView) v.findViewById(R.id.item_name);
TextView priceView = (TextView) v.findViewById(R.id.item_price);
nameView.setText(item.getName() + " ");
priceView.setText("€"+ String.valueOf(item.getPrice()));
price = (TextView)v.findViewById(R.id.price);
//number picker
np = (NumberPicker)v.findViewById(R.id.numpick);
np.setMaxValue(99);
np.setMinValue(0);
np.setValue(0);
np.setOnValueChangedListener(this);
return v;
}