当用户更改数字选择器小部件内的值时,我正在尝试更新 TextView 中显示的值。
我设置了号码选择器并正常工作,但是当我尝试调用 TextView 的 .setText() 方法时,出现以下错误:
com.example.waitron5.MenuItemArrayAdapter.onValueChange 处的 java.lang.NullPointerException(MenuItemArrayAdapter.java:68)
下面是与 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
}
放入 Toast 消息以测试侦听器是否正常工作,并且确实如此。然后我添加了 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;
}