2013-11-22 60 views
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) 

我錯過了什麼?

回答

0

因爲我不知道代碼中的代碼行是什麼146我想猜這就是你的問題。

Button btHodometro = (Button)findViewById(R.id.btHodometroAbastecimento); 
    btHodometro.setText(""+n1 + n2 + n3 + n4 + n5 + n6); 

btHodometro爲null,因爲它不能在您的視圖找到它,你要麼沒有它在你的觀點,或者你不給它使用正確的看法。

如果這個按鈕在你R.layout.sixnumber佈局,然後像你這樣的其他元素

+0

是正確的,在這一行的錯誤,你應該初始化它在你的構造。這個按鈕在我的活動中,當我點擊它時,出現這個對話框,並將R.layout.sixnumber作爲佈局調用。爲什麼我稱之爲按鈕時會崩潰?這是在我的活動中。 – Roland

+0

它的崩潰是因爲您的活動不再處於視圖中如果對話框已啓動,則需要在對話框關閉時創建對活動的回調以設置按鈕 – tyczj

+0

我該怎麼做? – Roland