我想MH在TimePicker onTimeSet not being called的回答了这个问题之后,显示在一个片段不同TextViews不同的日期设置日期,但我没有得到一个片段相同的结果。我的代码是不能工作在多TextViews
我已经加入一个单独的DatePickerFragment类,其中我使用其被用作一个回调方法和在片段类药物被定义的接口类。
我如何在一个片段中设置多个日期选择器?
的DatePickerFragment被写为:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private int mId;
DatePickerDialogListener mListener;
protected static DatePickerFragment newInstance(int id) {
Bundle args = new Bundle();
args.putInt("picker_id", id);
DatePickerFragment fragment = new DatePickerFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// ... omitted
final Calendar c = Calendar.getInstance();
int mDay = c.get(Calendar.DAY_OF_MONTH);
int mMonth = c.get(Calendar.MONTH);
int mYear = c.get(Calendar.YEAR);
mId = getArguments().getInt("picker_id");
mListener = getActivity() instanceof DatePickerFragment.DatePickerDialogListener ? (DatePickerFragment.DatePickerDialogListener) getActivity() : null;
// Create a new instance of TimePickerDialog and return it
return new DatePickerDialog(getActivity(), this, mYear, mMonth, mDay);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
if (mListener != null) mListener.onDateSet(mId, view, year, month, dayOfMonth);
}
public static interface DatePickerDialogListener {
public void onDateSet(int id, DatePicker view, int year, int month, int dayOfMonth);
}
}
其将利用本datepickerdialog片段类药物有以下代码:
public class Medication extends Fragment implements DatePickerFragment.DatePickerDialogListener {
private static final int FIRST_VISIT_ID = 1;
private static final int SECOND_VISIT_ID = 2;
private static final int THIRD_VISIT_ID = 3;
private int mYear;
private int mMonth;
private int mDay;
protected static TextView date1;
protected static TextView date2;
protected static TextView date3;
public Medication() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_medication, container, false);
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
date1 =(TextView) view.findViewById(R.id.visit_date1);
date2 =(TextView) view.findViewById(R.id.visit_date2);
date3 =(TextView) view.findViewById(R.id.visit_date3);
date1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment newFragment = DatePickerFragment.newInstance(FIRST_VISIT_ID);
newFragment.show(getFragmentManager(), "timePicker");
}
});
date2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment newFragment = DatePickerFragment.newInstance(SECOND_VISIT_ID);
newFragment.show(getFragmentManager(), "timePicker");
}
});
date3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment newFragment = DatePickerFragment.newInstance(THIRD_VISIT_ID);
newFragment.show(getFragmentManager(), "timePicker");
}
});
date1.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(mDay).append("/")
.append(mMonth + 1).append("/")
.append(mYear).append(" "));
date2.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(mDay).append("/")
.append(mMonth + 1).append("/")
.append(mYear).append(" "));
date3.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(mDay).append("/")
.append(mMonth + 1).append("/")
.append(mYear).append(" "));
return view;
}
@Override
public void onDateSet(int id, DatePicker view, int year, int month, int dayOfMonth) {
Log.i("DatePicker", "Date picker set from id " + id + "!");
if(id == FIRST_VISIT_ID)
{
this.date1.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(dayOfMonth).append("/")
.append(month + 1).append("/")
.append(year).append(" "));
}
if(id == SECOND_VISIT_ID)
{
this.date2.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(dayOfMonth).append("/")
.append(month + 1).append("/")
.append(year).append(" "));
}
if(id == THIRD_VISIT_ID)
{
this.date3.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(dayOfMonth).append("/")
.append(month + 1).append("/")
.append(year).append(" "));
}
}
}
我曾尝试添加多个拾取器用于时间选择器的这个方法对话框,但同样的问题发生在Medication类中的onTimeSet方法没有被调用,因为在这里onDateSet。
的问题是,该对话框打开,当我点击一个TextView但之后,我改变日期,该TextView的日期不会改变。此外,日志信息消息未显示为onDateSet方法未被调用。 也许mListener在这种情况下是空的,我只能猜测。 请帮我解决这个问题。提前致谢。