2017-03-07 124 views
0

嗨,試圖從它們各自的類中獲取日期和時間的值,並將它們設置在片段中的文本視圖中。 香港專業教育學院試圖將它設置在一個變量和方法調用它,但它似乎並沒有工作從片段內的DialogFragment獲取日期和時間的值Android

這是我在該片段中類代碼,我想設置textviews set_date和set_time

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_edit_timetable, container, false); 

    selectDate = (Button) view.findViewById(R.id.selectDate); 
    selectTime = (Button) view.findViewById(R.id.selectTime); 
    set_date = (TextView) view.findViewById(R.id.set_date); 
    set_time = (TextView) view.findViewById(R.id.set_time); 
    selectDate.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      // Show Date dialog 
      DialogFragment newFragment = new SelectDateFragment(); 
      newFragment.show(getActivity().getFragmentManager(), "Date Picker"); 

     } 
    }); 
    selectTime.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      // Show time dialog 
      DialogFragment newFragment = new SelectTimeFragment(); 
      //newFragment.show(getActivity().getFragmentManager(), DIALOG_TIME); 
      newFragment.show(getActivity().getFragmentManager(), "Time Picker"); 
     } 
    }); 

    return view; 
} 

SelectDateFragment類

public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

private String date = ""; 
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final Calendar calendar = Calendar.getInstance(); 
    int yy = calendar.get(Calendar.YEAR); 
    int mm = calendar.get(Calendar.MONTH); 
    int dd = calendar.get(Calendar.DAY_OF_MONTH); 
    return new DatePickerDialog(getActivity(), this, yy, mm, dd); 
} 

@Override 
public void onDateSet(DatePicker view, int yy, int mm, int dd) { 
    populateSetDate(yy, mm+1, dd); 
} 
public void populateSetDate(int year, int month, int day) { 
    date = month+"/"+day+"/"+year; 
} 

public String getDate() { 
    return date; 
} 

SelectTimeFragment類

public class SelectTimeFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener { 

private String time = ""; 
public SelectTimeFragment() { 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the current time as the default values for the picker 

    final Calendar calendar = Calendar.getInstance(); 
    int hour = calendar.get(Calendar.HOUR_OF_DAY); 
    int minute = calendar.get(Calendar.MINUTE); 

    // Create a new instance of TimePickerDialog and return it 
    return new TimePickerDialog(getActivity(), this, hour, minute, 
      DateFormat.is24HourFormat(getActivity())); 
} 

@Override 
public void onTimeSet(TimePicker view, int hour, int minute) { 
    time = String.valueOf(hour) + ":" + String.valueOf(minute); 

} 

public String getTime() { 
    return time; 
} 
+0

爲什麼使用片段對話框。 DatePickerDialog已經足夠了,你應該在onClick of按鈕上創建並顯示它。 –

+0

只關注日期字段,您是否確認了您在'onDateSet()'中獲得了您期望的值? – Cheticamp

回答

0

在選擇[日期/時間]片段中添加此方法。

private void sendResult(int resultCode, Date mDate) { 
    if (getTargetFragment() == null) 
     return; 
    Intent i = new Intent(); 
    i.putExtra("EXTRA_DATE", mDate); 
    getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, i); 
} 

在populateSetDate()加入這一行

public void populateSetDate(int year, int month, int day) { 
    date = month+"/"+day+"/"+year; 
    sendResult(Activity.RESULT_OK, date); //add this 
} 

下dialogFragment比如加入這行

selectDate.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     DialogFragment newFragment = new SelectDateFragment(); 
     newFragment.setTargetFragment(TIMETABLE_FRAGMENT, REQUEST_DATE); // add this 
     newFragment.show(getActivity().getFragmentManager(), "Date Picker"); 

    } 
}); 

終於在TIMETABLE_FRAGMENT添加此方法

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode != Activity.RESULT_OK) 
     return; 

    if (requestCode ==REQUEST_DATE) { 
     date = (Date) data.getSerializableExtra("EXTRA_DATE"); // this your selected date 
    } 
} 
+0

我得到2個錯誤,在片段時間表中找不到符號REQUEST_DATE和CommonFunctoins – Ahmad

+0

Request_date只是一個唯一的代碼。例如; REQUEST_DATE = 1234,REQUEST_TIME = 5678。你需要在你的onActivtyResult()中。對不起CommonFunctions :)這是我的通用函數類。 – Kaloglu

+0

仍然沒有運氣,應該這樣設置:newFragment.setTargetFragment(newFragment,1234);或者,我是否需要用timetable_fragment – Ahmad

0

Assum荷蘭國際集團,你是讓你在onDateSet預期數據,請嘗試以下操作:

SelectDateFragment刪除implements和刪除onDateSet。改變你如何撥打DatePickerDialog

public class SelectDateFragment extends DialogFragment { 

private String date = ""; 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final Calendar calendar = Calendar.getInstance(); 
    int yy = calendar.get(Calendar.YEAR); 
    int mm = calendar.get(Calendar.MONTH); 
    int dd = calendar.get(Calendar.DAY_OF_MONTH); 

    return new DatePickerDialog(getActivity(), (DatePickerDialog.OnDateSetListener) getParentFragment(), yy, mm, dd); 
} 

public void populateSetDate(int year, int month, int day) { 
    date = month+"/"+day+"/"+year; 
} 

public String getDate() { 
    return date; 
} 

implements添加到頂層片段。這是您設置日期和時間的地方。此外,添加在這裏onDateSet

Public class YourTopFragment extends Fragment implements DatePickerDialog.OnDateSetListener 

... 

@Override 
public void onDateSet(DatePicker view, int yy, int mm, int dd) { 
    set_date.setText(...the text you want to set goes here...); 
} 

這將直接DialogFragment直接告知選定的日期的頂層片段。

類似的東西應該適用於設置時間。

+0

第一個報價中的onCreateView()的父母[我得到這個錯誤,即使我在片段,將得到日期](https://i.gyazo.com/fd420f4c057ceb2ae03c1fdac8ae53f9 。png) – Ahmad

+0

需要在那裏投射一個類型。查看更新的代碼。 – Cheticamp

+0

謝謝修復它,雖然onDateSet方法dosent似乎在日期設置時運行 – Ahmad

相關問題