【发布时间】:2018-04-19 13:38:14
【问题描述】:
我正在尝试从用户那里选择特定日期,然后在 EditText 中显示它。我正在使用以下方法,在从 onDateSet() 中的 DatePickerDialog 选择日期后,我正在更新 EditText 但编辑文本永远不会更新(不显示所选值)请。指导代码有什么问题?
public class CreateReport extends AppCompatActivity {
EditText blockName;
EditText eventDesc;
public EditText eventDate;
public EditText eventTime;
EditText reporterName;
EditText reporterCnic;
public static Calendar userCalendar;
private String Lat, Long;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_create_report);
// final ActionBar ab = getSupportActionBar();
// ab.setTitle("Create Reoprt");
Bundle bundle = getIntent().getExtras();
blockName = (EditText) findViewById(R.id.block_name);
eventDate = (EditText) findViewById(R.id.ev_Date);
eventTime = (EditText) findViewById(R.id.ev_Time);
reporterName = (EditText) findViewById(R.id.reporter_name);
reporterName.setText(AppSettings.getUserName());
reporterCnic = (EditText) findViewById(R.id.reporter_cnic);
reporterCnic.setText(AppSettings.getUserCnic());
reporterName.setEnabled(false);
reporterCnic.setEnabled(false);
eventDesc = (EditText) findViewById(R.id.event_desc);
eventDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDatePickerDialog(v);
}
});
eventTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showTimePickerDialog(v);
}
});
if (bundle != null) {
Lat = bundle.getString("lat");
Toast.makeText(getContext(), "Latitude" + Lat, Toast.LENGTH_LONG).show();
Long = bundle.getString("Long");
}
}
public void showTimePickerDialog(View v) {
TimePickerFragment newFragment = new TimePickerFragment();
newFragment.setOnTimeSelectedListener(new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String myFormat = "HH:mm";
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
Calendar cal = Calendar.getInstance();
cal.set(hourOfDay, minute);
String formattedTime = sdf.format(cal.getTime());
eventTime.setText(formattedTime);
Toast.makeText(CreateReport.this, "Time" + formattedTime, Toast.LENGTH_LONG).show();
}
});
newFragment.show(getSupportFragmentManager(), "timePicker");
}
public void showDatePickerDialog(View v) {
DatePickerFragment newFragment = new DatePickerFragment();
newFragment.setOnDateSelectedListener(new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
// Do something with the date chosen by the user
String myFormat = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
Calendar cal = Calendar.getInstance();
cal.set(year, month, dayOfMonth);
String formattedTime = sdf.format(cal.getTime());
eventDate.setText(formattedTime);
Toast.makeText(CreateReport.this, "Date" + formattedTime, Toast.LENGTH_LONG).show();
}
});
newFragment.show(getSupportFragmentManager(), "datePicker");
}
public static class TimePickerFragment extends DialogFragment {
TimePickerDialog.OnTimeSetListener mListener;
public TimePickerFragment() {
// Default constructor. Required
}
public void setOnTimeSelectedListener(TimePickerDialog.OnTimeSetListener listener) {
mListener = listener;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int sec = c.get(Calendar.SECOND);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getContext(),mListener, hour, minute, true);
}
}
public static class DatePickerFragment extends DialogFragment {
DatePickerDialog.OnDateSetListener mListener;
public DatePickerFragment() {
// Default constructor. Required
}
public void setOnDateSelectedListener(DatePickerDialog.OnDateSetListener listener) {
mListener = listener;
}
@NonNull
@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(getContext(), mListener, year, month, day);
}
}
}
XML 代码
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/crt_event_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true">
<EditText
android:id="@+id/block_name"
android:inputType="textAutoComplete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/loginfields_borders"
android:hint="Block Name"
android:padding="12dp"
android:textColor="#a3a3a3"
android:textSize="13sp" />
<EditText
android:id="@+id/ev_Date"
android:inputType="datetime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/loginfields_borders"
android:hint="Event Date"
android:focusable="false"
android:padding="12dp"
android:textColor="#a3a3a3"
android:textSize="13sp"
android:onClick="showDatePickerDialog"/>
<EditText
android:id="@+id/ev_Time"
android:inputType="datetime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/loginfields_borders"
android:hint="Event Time"
android:focusable="false"
android:padding="12dp"
android:textColor="#a3a3a3"
android:textSize="13sp" />
<EditText
android:id="@+id/reporter_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@drawable/loginfields_borders"
android:hint="Reporting Official"
android:padding="12dp"
android:textColor="#a3a3a3"
android:textSize="13sp" />
<EditText
android:id="@+id/reporter_cnic"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@drawable/loginfields_borders"
android:hint="Reporting Official"
android:padding="12dp"
android:textColor="#a3a3a3"
android:textSize="13sp" />
<EditText
android:id="@+id/event_desc"
android:inputType="textAutoComplete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/loginfields_borders"
android:hint="Event Description"
android:padding="12dp"
android:textColor="#a3a3a3"
android:textSize="13sp" />
</LinearLayout>
</RelativeLayout>
</ScrollView>
单击日期编辑文本后生成的日志以及由于 CreateReport Activity 的破坏
04-19 21:30:16.281 28941-28941/? I/art: Late-enabling -Xcheck:jni
Reinit property: dalvik.vm.checkjni= false
04-19 21:30:16.517 28941-28941/com.example.aiousecurityapplication W/System: ClassLoader referenced unknown path: /data/app/com.example.aiousecurityapplication-1/lib/arm64
04-19 21:30:16.534 28941-28941/com.example.aiousecurityapplication I/InstantRun: starting instant run server: is main process
04-19 21:30:16.563 28941-28941/com.example.aiousecurityapplication I/HwCust: Constructor found for class android.app.HwCustActivityImpl
04-19 21:30:16.614 28941-28941/com.example.aiousecurityapplication W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
04-19 21:30:16.901 28941-28941/com.example.aiousecurityapplication W/PhoneWindow: Previously focused view reported id 2131296398 during save, but can't be found during restore.
04-19 21:30:16.907 28941-28941/com.example.aiousecurityapplication I/HwSecImmHelper: mSecurityInputMethodService is null
04-19 21:30:16.911 28941-28941/com.example.aiousecurityapplication I/HwPointEventFilter: do not support AFT because of no config
04-19 21:30:16.988 28941-28941/com.example.aiousecurityapplication I/HwCust: Constructor found for class android.net.HwCustConnectivityManagerImpl
04-19 21:30:17.022 28941-28941/com.example.aiousecurityapplication E/RecyclerView: No adapter attached; skipping layout
04-19 21:30:17.022 28941-28964/com.example.aiousecurityapplication I/OpenGLRenderer: Initialized EGL, version 1.4
04-19 21:30:17.033 28941-28964/com.example.aiousecurityapplication W/linker: /vendor/lib64/libhwuibp.so: unused DT entry: type 0xf arg 0xe3a
04-19 21:30:17.111 28941-28941/com.example.aiousecurityapplication W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in
android.widget.ListView
04-19 21:30:17.208 28941-28941/com.example.aiousecurityapplication E/RecyclerView: No adapter attached; skipping layout
04-19 21:30:18.734 28941-28946/com.example.aiousecurityapplication I/art: Do partial code cache collection, code=23KB, data=29KB
04-19 21:30:18.735 28941-28946/com.example.aiousecurityapplication I/art: After code cache collection, code=23KB, data=29KB
Increasing code cache capacity to 128KB
【问题讨论】:
标签: android datepicker android-dialogfragment