我正在尝试设置最小日期(应该是当前日期),以便用户无法选择比今天更早的日期。你可以看到我在片段中工作。我已经搜索了帮助,但要么我不清楚,因为我刚开始编码或者我没有使用它。这是我编码到现在为止,但我不能再进一步。
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 datePicker, int year, int month, int day) {
Calendar cal = new GregorianCalendar(year, month, day);
setDate(cal);
}
protected void setDate(final Calendar calendar) {
final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
((TextView) getActivity().findViewById(R.id.datenaissance)).setText(dateFormat.format(calendar.getTime()));
}
}
这是我正在使用的第二个片段:
package cm.opep.opep.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import cm.opep.opep.R;
public class RegistrationFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_registration, container, false);
initUI(v);
return v;
}
private void initUI(View v){
//Lancement de la date de naissance
EditText datenaissance = (EditText) v.findViewById(R.id.datenaissance);
datenaissance.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DatePickerFragment fragment = new DatePickerFragment();
fragment.show(getFragmentManager(), "datePicker");
}
});
}
}
这是XML代码:
<LinearLayout xmlns
android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white"
tools:context="cm.opep.opep.Tiroir$PlaceholderFragment">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="UselessParent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/datenaissance"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:hint="@string/date_de_naissance"
android:inputType="date"
android:textColor="@color/colorPrimaryDark"
android:textSize="12sp"
android:onClick="datePicker"
android:focusable="False"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"/>
</LinearLayout>
</ScrollView>
</LinearLayout>
任何帮助将不胜感激。感谢
答案 0 :(得分:2)
您需要做的就是创建一个DatePickerDialog实例并使用'set min date()'函数。
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
DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);
// Here you can set the minimum date on date picker ********
dialog.getDatePicker().setMinDate(new Date().getTime());
return dialog;
}
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
Calendar cal = new GregorianCalendar(year, month, day);
setDate(cal);
}
protected void setDate(final Calendar calendar) {
final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
((TextView) getActivity().findViewById(R.id.datenaissance)).setText(dateFormat.format(calendar.getTime()));
}
}
或者你可以使用这个类:
public class StartDatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener {
Calendar c = Calendar.getInstance();
int startYear = c.get(Calendar.YEAR);
int startMonth = c.get(Calendar.MONTH);
int startDay = c.get(Calendar.DAY_OF_MONTH);
SharedPreferences objSharedPreferences;
SharedPreferences.Editor objEditor;
private Activity activity;
private View component;
public StartDatePicker(Activity activity, View component) {
this.activity = activity;
this.component = component;
createSharedPreferences();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// TODO Auto-generated method stub
// Use the current date as the default date in the picker
DatePickerDialog dialog = new DatePickerDialog(activity, this, startYear, startMonth, startDay);
// dialog.getDatePicker().setMaxDate(new Date().getTime());
// dialog.getDatePicker().setMinDate(new Date().getTime());
return dialog;
}
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
try {
startDay = dayOfMonth;
startMonth = monthOfYear + 1;
startYear = year;
String dateToBeSet = startDay + "-" + getMonth(startMonth) + "-" + startYear;
if (component instanceof EditText) {
((EditText) component).setText(dateToBeSet);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String getMonth(int month) {
return new DateFormatSymbols().getMonths()[month - 1].substring(0, 3);
}
}
在editText上,单击使用以下代码:
DialogFragment dialogFragment = new StartDatePicker(this, fromDateEditText);
dialogFragment.show(getFragmentManager(), "start_date_picker");