2017-03-07 130 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

相关问题