我想知道有没有办法在片段中创建datePicker?我正在创建一个常规活动,它会给我语法错误。什么是正确的方法来做到这一点?如何在片段类中创建datePicker和timePicker对话框?
回答
您很可能需要使用DialogFragment。我在这里找到了一些信息:
和这里有很大帮助:
这应该可以帮助你在你的方式,我现在做的这事。虽然示例代码中我不使用生成器,而是直接返回:
return new DatePickerDialog(getActivity(), mDateSetListener, mYear, mMonth, mDay);
这似乎是工作...虽然我无法弄清楚如何尚未更新上调用该DialogFragment片段中的文本。我认为这会工作,它不会:
public void updateDisplay()
{
//update our button text from the calling fragment, this isn't quite working
//doesn't crash just doesn't update...must be missing something.
View v=getActivity()
.getLayoutInflater()
.inflate(R.layout.session_edits, null);
Button sessionDate = (Button)v.findViewById(R.id.sessionPickDate);
sessionDate.setText(new StringBuilder()
.append(mMonth+1).append("-").append(mDay).append("-").append(mYear).append(" "));
}
扩展在Codejoy的回答是:
这里是我DatePickerDialogFragment类:
public class DatePickerDialogFragment extends DialogFragment {
private Fragment mFragment;
public DatePickerDialogFragment(Fragment callback) {
mFragment = callback;
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new DatePickerDialog(getActivity(), (OnDateSetListener) mFragment, 1980, 7, 16);
}
}
(请注意,构造函数接受的是片段使用这个对话框 - 并且我们使用这个参考作为DatePickerDialog的回调监听器字段)
然后我的片段实现了onDateSetListener:
public class SignupFragment extends Fragment implements OnDateSetListener {
...
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// do stuff with the date the user selected
}
}
...然后我告诉我的,从片段中的对话框,如下所示:
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = new DatePickerDialogFragment(this);
newFragment.show(ft, "dialog");
不知道这是做的最好办法,但似乎很好地工作。
以前的浏览器解释得不够好,但这里是我如何更改DialogFragmentDateSet方法的视图。
您可以将您想要更改的视图传递给扩展DialogFragment的类的构造函数。然后调用该类的setText方法的onDateSet方法。下面是代码:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
public EditText activity_edittext;
public DatePickerFragment(EditText edit_text) {
activity_edittext = edit_text;
}
@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);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
activity_edittext.setText(String.valueOf(month + 1) + "/" + String.valueOf(day) + "/" + String.valueOf(year));
}
}
然后,你可以展示你的片段是这样的:
public void showDatePickerDialog(View v) {
new DatePickerFragment((EditText) v).show(getSupportFragmentManager(), "datePicker");
}
设置要更改的EditText的这种方法的onClick方法。就像这样:
<EditText
android:id="@+id/editTextToShowDate"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:ems="10"
android:focusable="false"
android:inputType="date"
android:onClick="showDatePickerDialog" >
</EditText>
作品。谢谢你 –
虽然上述回答可能的工作,我相信我有一个更简单的解决方案:
DatePickerDialog dialog = new DatePickerDialog(getActivity(), datePickerListener,
2000, 1,1);
dialog.show();
哪里datePickerListerener是这样的:
private DatePickerDialog.OnDateSetListener datePickerListener
= new DatePickerDialog.OnDateSetListener() {
// when dialog box is closed, below method will be called.
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {
//Do whatever you want
}
};
这里是一个片段在想用datepicker的片段中:
private Callbacks mCallbacks;
private String tag;
/**
* A callback interface that all fragments/activities containing this fragment must
* implement. This mechanism allows activities to be notified of item
* selections.
*/
public interface Callbacks {
/**
* Callback for when an item has been selected.
*/
public void onSelected(Date date, String tag);
}
public static DatePickerFragment newInstance(Fragment fragment,
Date date, String tag) {
DatePickerFragment dateFragment = new DatePickerFragment();
Calendar c = Calendar.getInstance();
if (date != null) {
c.setTime(date);
}
dateFragment.setYear(c.get(Calendar.YEAR));
dateFragment.setMonth(c.get(Calendar.MONTH));
dateFragment.setDay(c.get(Calendar.DAY_OF_MONTH));
dateFragment.setmCallbacks((Callbacks) fragment);
dateFragment.setTag(tag);
return dateFragment;
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
Calendar cal = Calendar.getInstance();
cal.set(year, month, day);
date = new Date(cal.getTime().getTime());
setType(1);
mCallbacks.onSelected(date,tag);
}
,并在您的片段:
public class DetailFragment extends Fragment implements
DatePickerFragment.Callbacks {
。 。 。
private void startDatePicker(String tag) {
DialogFragment newFragment = DatePickerFragment.newInstance(this,
invoiceModell.getInvoice().getInvoiceDate(), tag);
newFragment.show(getActivity().getSupportFragmentManager(),
"datePicker");
}
@Override
public void onSelected(Date date, String tag) {
if (tag.equals(FIRSTDATE))
invoiceModell.getInvoice().setInvoiceDate(date);
else if (tag.equals(SECONDDATE))
invoiceModell.getInvoice().setDueDate(date);
}
- 1. 创建包含TimePicker和DatePicker的对话框的问题?
- 2. Android:对话框片段和DatePicker片段不兼容类型
- 3. 在创建对话框片段时忽略对话框片段
- 4. Datepicker和timepicker从一个对话框内
- 5. 更改系统级对话框:TimePicker,DatePicker
- 6. 如何在对话框中创建片段?
- 7. 如何更改默认颜色方案timepicker对话框片段?
- 8. 在Android TimePicker对话框片段中显示12hh格式
- 9. 重用片段以创建对话框
- 10. 的DatePicker和TimePicker对话问题
- 11. 如何在Android中更改DatePicker和TimePicker对话框的默认颜色?
- 12. TimePicker对话框
- 13. Timepicker对话框和SharedPreferences
- 14. 创建一个从的DatePicker和TimePicker
- 15. 在Fragment中创建对话框,从对话框创建对话框片段,并且想要访问对话框中的对话框的TextViewFragment
- 16. Datepicker和TimePicker对话框需要点击两次按钮
- 17. 如何创建100%自定义对话框片段
- 18. 如何在Android中的片段中创建是/否警报对话框
- 19. 如何在andorid中的片段选项卡中创建进度对话框?
- 20. 如何在内部类片段中添加进度对话框
- 21. Android - 片段中的对话框片段
- 22. 如何在javascript中创建对话框?
- 23. 如何在UWP中创建对话框?
- 24. 如何在自定义对话框中创建幻灯片?
- 25. 如何将对话框片段的结果接收到对话框片段
- 26. 从DatePicker和TimePicker控件创建DateTime对象
- 27. 如何创建包含图片和链接的对话框?
- 28. 安卓的DatePicker和DatePicker的对话框
- 29. 如何使用对话框片段设置全屏对话框
- 30. 片段,对话框片段问题
你在哪里使用“prev”? –
我有一个edittext,它应该有一个日期。我从这个edittext中设置onClicklistener来按照你的方式打开这个片段,并且它正在工作。问题是键盘也打开了。我该如何解决这个问题?谢谢 –
@PauloBarros“prev”是用这个标签(比如另一个对话框)去除屏幕上的任何以前的片段,但在这个例子中没有使用。我更新了代码,没有它。 – NPike