0
我使用一個類來處理NumberPicker,我想使用Class中的值設置Button的文本。我在NumberPickerDialog中使用六個numberpicker。如何獲取NumberPickerDialog的值?
這是類:
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;
}
}
的問題是,當我嘗試設置文本的BUTTOM(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)
我錯過了什麼?
是正確的,在這一行的錯誤,你應該初始化它在你的構造。這個按鈕在我的活動中,當我點擊它時,出現這個對話框,並將R.layout.sixnumber作爲佈局調用。爲什麼我稱之爲按鈕時會崩潰?這是在我的活動中。 – Roland
它的崩潰是因爲您的活動不再處於視圖中如果對話框已啓動,則需要在對話框關閉時創建對活動的回調以設置按鈕 – tyczj
我該怎麼做? – Roland