2014-03-19 46 views
0

我創建了一個更新類變量的類。我創建了一個新的類實例,然後試圖調用get方法。但是我得到了'canno't解決方法錯誤,我不知道爲什麼。無法從類實例調用方法Android

public static class DatePickerFragment extends DialogFragment 
    implements DatePickerDialog.OnDateSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 

     // Create a new instance of DatePickerDialog and return it 
     return new DatePickerDialog(getActivity(), this, year, month, day); 
    } 
    int selectedDate; 
    public void onDateSet(DatePicker view, int year, int month, int day) { 
     // Do something with the date chosen by the user 
     selectedDate = day+month+year; 
    } 
    public int getSelectedDate() { 
     return selectedDate; 
    } 

} 
public void showDatePickerDialog(View view) { 
    DialogFragment newFragment = new DatePickerFragment(); 
    newFragment.show(getFragmentManager(), "datePicker"); 
    int output = newFragment.getSelectedDate(); 
} 
+0

也發佈logcat錯誤。 –

+0

哪種方法引發錯誤?顯示你的logcat。 – Piyush

+0

哪種方法無法解決? – donfuxx

回答

1

的錯誤是在這裏:

public void showDatePickerDialog(View view) { 
    DialogFragment newFragment = new DatePickerFragment(); 
    newFragment.show(getFragmentManager(), "datePicker"); 
    int output = newFragment.getSelectedDate(); 
} 

您的變量newFragmentDialogFragment。所以,你必須轉換的變量或者改變這樣的聲明:

DatePickerFragment newFragment = new DatePickerFragment(); 

int output = ((DatePickerFragment)newFragment).getSelectedDate(); 

編輯: 爲得到你必須使用監聽器選定的日期,而不是同步方法。 所以你必須以這種方式來改變你的代碼:

public static class DatePickerFragment extends DialogFragment 
implements DatePickerDialog.OnDateSetListener { 
private MyListener listener; 
public DatePickerFragment(MyListener listener){ 
    this.listener = listener; 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the current date as the default date in the picker 
    final Calendar c = Calendar.getInstance(); 
    int year = c.get(Calendar.YEAR); 
    int month = c.get(Calendar.MONTH); 
    int day = c.get(Calendar.DAY_OF_MONTH); 

    // Create a new instance of DatePickerDialog and return it 
    return new DatePickerDialog(getActivity(), this, year, month, day); 
} 
int selectedDate; 
public void onDateSet(DatePicker view, int year, int month, int day) { 
    // Do something with the date chosen by the user 
    selectedDate = day+month+year; 
    if(listener!=null){ 
     listener.theDateHasChanged(selectedDate); 
    } 
} 
public int getSelectedDate() { 
    return selectedDate; 
} 

然後你的活動必須實現MyListener接口和實現theDateHasChanged和最終你必須實例您從您的activity所以fragment

DatePickerFragment newFragment = new DatePickerFragment(this); 
+0

好,所以代碼工作。謝謝。我在做什麼?我的理解是,該方法將返回一個int,然後可以將其傳遞給變量。 –

+0

檢查出:我已更新我的回答 –

+0

您能推薦一個好的資源嗎?我不清楚爲什麼我要使用一個監聽器。方法的重點不在於處理選定的日期嗎? –

-1

也許這是因爲你的班級是靜態的。在java中,你不能創建一個定義爲靜態的類的實例。對於靜態類,您可以直接使用 。();

DatePickerFragment.show(getFragmentManager(),"datePicker"); 

希望這會有所幫助。 :)