![](/img/trans.png)
[英]How to save user input from EditText to a variable to be used on a different Activity
[英]How to used datepicker dialogdragment different edittext
我有從DialogFragment擴展的DatepickerFragment。 在我的主要片段中,有兩個edittext。第一個用於開始日期,第二個用於完成日期。 這些是針對某些用戶操作的。用戶單擊第一個edittext選擇日期,而另一個單擊的方式相同,但是我對如何處理DatepickerFragment上的edittext感到困惑。什么是最佳方法?
etOverFlowingStaringDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getActivity().getFragmentManager();
DatePickerFragment datePickerFragment = new DatePickerFragment();
datePickerFragment.show(fragmentManager, "datepicker");
}
});
DatepickerFragment.java
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);
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
populateSetDate(year, monthOfYear+1, dayOfMonth);
}
private void populateSetDate(int year, int month, int dayOfMonth) {
String datetime = dayOfMonth + "/" + month + "/" + year ;
//EditText edtext = (EditText)getView().findViewById(R.id.overflow_starting_date);
// The edittext is changable it is not a good way to define in here
}
}
我通常會在一個單獨的類中創建自定義DatePickerFragment
,然后使用Listener模型來實現您要實現的目標。 實質上:
在您的DatePickerFragment中,定義一個接口-
public interface OnDateChosenListener {
void onDateChosen(int year, int month, int day);
}
然后,在DatePickerFragment類中為該接口定義一個私有變量-
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private OnDateChosenListener mOnDateChosenListener = null;
...
添加一個函數來設置OnDateChosenListener-
public void setOnDateChosenListener(OnDateChosenListener listener) {
mOnDateChosenListener = listener;
}
DatePickerFragment類的最后一件事,將事件和值傳遞給偵聽器(如果存在)-
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
if (mOnDateChosenListener != null) {
mOnDateChosenListener.onDateChosen(year, monthOfYear, dayOfMonth);
}
}
最后,最重要。 請記住,無論您在何處使用新的DatePickerFragment,都應添加一個偵聽器,在這種情況下,就是一個Activity-
FragmentManager fragmentManager = getActivity().getFragmentManager();
DatePickerFragment datePickerFragment = new DatePickerFragment();
datePickerFragment.addOnDateChosenListener(new OnDateChosenListener() {
public void onDateChosen(int year, int month, int day) {
// use values to change EditText value
}
}
datePickerFragment.show(fragmentManager, "datepicker");
偵聽器模型是一種很好的做法,已在Android框架中廣泛使用。
我不確定我是否很好地理解了您的問題,但是一旦用戶選擇了它,您是否要在EditText
上獲取日期? 如果是這樣的話
創建一個界面,該界面將在您的活動/片段中接收您的日期:
interface DateReceiver {
void update(int year, int month, int day);
}
實現您的活動/片段,然后實現方法:
@Override
public void update(int year, int month, int day) {
String date = //format your date here;
this.editText.setText(date);
}
如果添加了onClickListener
您EDITTEXT ...:
etOverFlowingStaringDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerFragment fragment = new DatePickerFragment();
fragment.setReceiver(MainActivity.this); //assuming your activity is called MainActivity.this. 'this' alone won't work.
fragment.show(this.getFragmentManager(), "datePicker"); //do getActivity().getFragmentManager in a Fragment
}
});
您可能已經注意到,我編寫了fragment.setReceiver(MainActivity.this)
。 此方法在下面創建和定義。
然后,您應該通過實現DatePickerFragment
來實現以下目的:
public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private DateReceiver receiver;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int year = TransactionUtils.getFragment().mYearChosen;
int month = TransactionUtils.getFragment().mMonthChosen;
int day = TransactionUtils.getFragment().mDayChosen;
//If you want the minimum date to be today...
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
return datePickerDialog;
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
updateDate(year, monthOfYear, dayOfMonth);
}
public void setReceiver(DateReceiver receiver) {
this.receiver = receiver;
}
private void updateDate(int year, int monthOfYear, int dayOfMonth) {
if (receiver != null) //avoiding NullPointerExceptions :D
receiver.update(year, monthOfYear, dayOfMonth);
}
}
在private void updateDate(int,int,int)
調用update會更改editText的日期。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.