2012-10-17 59 views
2

我有一個按鈕,它拉起DatePicker片段,但我不知道如何使視圖更改取決於所選日期。我把onDateSet方法放在我的main.java中,這是調用片段的活動,意圖在這個方法內部改變視圖,但是當日期改變時它什麼都不做,我不知道我做錯了什麼。DatePicker更改日期後挑選視圖

public 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); 
    } 

    public void onDateSet(DatePicker view, int year, int monthOfYear, 
      int dayOfMonth) { 
     // TODO Auto-generated method stub 
    } 

和我MainScreen.java是

public class MainScreen extends FragmentActivity implements DatePickerDialog.OnDateSetListener { 

    static final int DATE_DIALOG_ID = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_screen); 
    } 

    public void showDatePickerDialog(View v) { 
     DatePickerFragment newFragment = new DatePickerFragment(); 
     newFragment.show(getFragmentManager(), "datePicker"); 
    } 

    public void onDateSet(DatePicker view, int year, int monthOfYear, 
      int dayOfMonth) { 

     Intent intent = new Intent(this, January_1.class); 
     startActivity(intent); 
    } 
} 
+0

爲什麼不你把'onDateSet()'代碼從主要的Actvity移動到你的DatePickerFragment? – Sam

+0

@Sam既然你把我打敗了,那就把它作爲答案吧。他將自己的聽衆設置爲'this',這是'Fragment'對象,而他的代碼位於'Activity'中。 – Eric

回答

1

你應該在你DatePickerFragement使用onDateSet()聽衆:

public 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); 
    } 

    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
     Activity activity = getActivity(); 
     Intent intent = new Intent(activity, January_1.class); 
     activity.startActivity(intent); 
    } 
} 

新增自評

您使用了錯誤的指數爲monthOfYear,從the documentation

monthOfYear所設的月份(0-11)與Calendar兼容性。

因此一月份爲0,二月是1,等...
爲了限制任何混亂,我建議使用來自Calendar類月份名稱和switch語句:

Intent intent; 
switch(monthOfYear) { 
case Calendar.JANUARY: 
    intent = new Intent(activity, January_1.class); 
    break; 
case Calendar.FEBRUARY: 
    // etc... 
} 
activity.startActivity(intent); 
+0

謝謝,它現在可以工作,但我試圖讓它爲每個頁面做不同的活動,我使用了if語句,但我想我做錯了。 – user1741292

+0

$公共無效onDateSet(的DatePicker視圖,INT年,月整型, \t \t \t INT請將dayOfMonth){ \t \t如果(月== 1){ \t \t活性活性= getActivity(); \t \t Intent intent = new Intent(activity,January_1.class); \t startActivity(intent); \t \t} \t} $ – user1741292

+0

哦,我明白你是怎麼說的,錯過了你的帖子的結尾。但是,當我輸入你的意圖並切換時,表示活動不能解析爲變量,並且希望我在每次輸入代碼時都將活動更改爲不同的內容。 – user1741292

相關問題