Android 如何从NumberPickerDialog中获取值?
我使用一个类来处理NumberPicker,我想用类中的值设置按钮的文本。我在NumberPickerDialog中使用六个数字选择器 这是一节课:Android 如何从NumberPickerDialog中获取值?,android,android-layout,android-dialog,Android,Android Layout,Android Dialog,我使用一个类来处理NumberPicker,我想用类中的值设置按钮的文本。我在NumberPickerDialog中使用六个数字选择器 这是一节课: public class NumberPickerDialog extends AlertDialog implements OnClickListener { private OnNumberSetListener mListener; private NumberPicker mNumberPicker1; private NumberPick
public class NumberPickerDialog extends AlertDialog implements OnClickListener {
private OnNumberSetListener mListener;
private NumberPicker mNumberPicker1;
private NumberPicker mNumberPicker2;
private NumberPicker mNumberPicker3;
private NumberPicker mNumberPicker4;
private NumberPicker mNumberPicker5;
private NumberPicker mNumberPicker6;
int n1;
int n2;
int n3;
int n4;
int n5;
int n6;
private int mInitialValue;
public NumberPickerDialog(Context context, int theme, int initialValue) {
super(context, theme);
mInitialValue = initialValue;
setButton(BUTTON_POSITIVE, "Confirmar", this);
setTitle("Valor Atual do Hodômetro (em Km)");
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.sixnumber, null);
setView(view);
mNumberPicker1 = (NumberPicker) view.findViewById(R.id.num_picker1);
mNumberPicker2 = (NumberPicker) view.findViewById(R.id.num_picker2);
mNumberPicker3 = (NumberPicker) view.findViewById(R.id.num_picker3);
mNumberPicker4 = (NumberPicker) view.findViewById(R.id.num_picker4);
mNumberPicker5 = (NumberPicker) view.findViewById(R.id.num_picker5);
mNumberPicker6 = (NumberPicker) view.findViewById(R.id.num_picker6);
}
/**
* Retrieve the number picker used in the dialog
*/
public NumberPicker getmNumberPicker1() {
return mNumberPicker1;
}
public NumberPicker getmNumberPicker2() {
return mNumberPicker2;
}
public NumberPicker getmNumberPicker3() {
return mNumberPicker3;
}
public NumberPicker getmNumberPicker4() {
return mNumberPicker4;
}
public NumberPicker getmNumberPicker5() {
return mNumberPicker5;
}
public NumberPicker getmNumberPicker6() {
return mNumberPicker6;
}
/**
* Set the range allowed for the number picker
* @param start the minimum allowed value
* @param end the maximum allowed value *
* and setting the value directly.
*/
public void setRange1(int start, int end) {
mNumberPicker1.setRange(start, end);
}
public void setRange2(int start, int end) {
mNumberPicker2.setRange(start, end);
}
public void setRange3(int start, int end) {
mNumberPicker3.setRange(start, end);
}
public void setRange4(int start, int end) {
mNumberPicker4.setRange(start, end);
}
public void setRange5(int start, int end) {
mNumberPicker5.setRange(start, end);
}
public void setRange6(int start, int end) {
mNumberPicker6.setRange(start, end);
}
/**
* Set the wrap option for the number picker
* @param wrap true if values need to wrap
* @deprecated Instead this can be set by retrieving the numberpicker
* and setting the value directly.
*/
/**
* Set the range for the number picker and the values to display
* @param start the minimum allowed value
* @param end the maximum allowed value
* @param displayedValues values to display in the numberpicker instead of
* the integer values of the range
* @deprecated Instead this can be set by retrieving the numberpicker
* and setting the value directly.
*/
public void setOnNumberSetListener(OnNumberSetListener listener) {
mListener = listener;
}
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == BUTTON_POSITIVE){
n1 = mNumberPicker1.getCurrent();
n2 = mNumberPicker2.getCurrent();
n3 = mNumberPicker3.getCurrent();
n4 = mNumberPicker4.getCurrent();
n5 = mNumberPicker5.getCurrent();
n6 = mNumberPicker6.getCurrent();
Button btHodometro = (Button)findViewById(R.id.btHodometroAbastecimento);
btHodometro.setText(""+n1 + n2 + n3 + n4 + n5 + n6);
}
}
public interface OnNumberSetListener {
public void onNumberSet(int selectedNumber);
}
public int getN1() {
return n1;
}
public int getN2() {
return n2;
}
public int getN3() {
return n3;
}
public int getN4() {
return n4;
}
public int getN5() {
return n5;
}
public int getN6() {
return n6;
}
}
问题是,当我试图设置文本的按钮(bt.setText())时,它会给我一个错误
11-22 15:36:44.489: E/AndroidRuntime(6733): FATAL EXCEPTION: main
11-22 15:36:44.489: E/AndroidRuntime(6733): java.lang.NullPointerException
11-22 15:36:44.489: E/AndroidRuntime(6733): at br.com.going2.carrorama.helper.NumberPickerDialog.onClick(NumberPickerDialog.java:146)
11-22 15:36:44.489: E/AndroidRuntime(6733): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:165)
11-22 15:36:44.489: E/AndroidRuntime(6733): at android.os.Handler.dispatchMessage(Handler.java:99)
11-22 15:36:44.489: E/AndroidRuntime(6733): at android.os.Looper.loop(Looper.java:130)
11-22 15:36:44.489: E/AndroidRuntime(6733): at android.app.ActivityThread.main(ActivityThread.java:3687)
11-22 15:36:44.489: E/AndroidRuntime(6733): at java.lang.reflect.Method.invokeNative(Native Method)
11-22 15:36:44.489: E/AndroidRuntime(6733): at java.lang.reflect.Method.invoke(Method.java:507)
11-22 15:36:44.489: E/AndroidRuntime(6733): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
11-22 15:36:44.489: E/AndroidRuntime(6733): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
11-22 15:36:44.489: E/AndroidRuntime(6733): at dalvik.system.NativeStart.main(Native Method)
我遗漏了什么?因为我不知道代码中的哪一行是
146
,我猜这就是你的问题
Button btHodometro = (Button)findViewById(R.id.btHodometroAbastecimento);
btHodometro.setText(""+n1 + n2 + n3 + n4 + n5 + n6);
b hodometro
为空,因为它在您的视图中找不到它,或者您的视图中没有它,或者您没有给它正确的视图来使用它
如果此按钮位于
R.layout.sixnumber
布局中,则应在构造函数中初始化它,就像初始化其他元素一样。错误就在这一行。此按钮在我的活动中,当我单击它时,将显示此对话框并将R.layout.sixnumber称为layout。为什么我按按钮时它会崩溃?它在我的活动中。它崩溃是因为你的活动不再在视图中。如果对话框打开,你需要在对话框关闭时创建一个对活动的回调来设置按钮,你应该使用片段,然后你可以这样做