Вот фрагмент кода, с которым я работаю.Я делаю приложение для Android, и все идет отлично, кроме этой одной проблемы, и Google не был моим другом в этом.Я выделил важные части.Проблема в том, что когда TextView загружаются с данными с помощью метода updateboxes (), все работает отлично.Когда они загружены с populateFields ();Метод, средство выбора времени или даты не распознает значения, так как они приходят прямо из базы данных и не построены с помощью stringBuilder, как метод updateboxes ().
Строки не моя сильная сторона и единственное, о чем я могу думатьэто разбивает строки обратно на отдельные значения mDay mMonth mYear и затем запускает их обратно через метод updateBoxes (), но я думаю, что будет более простой способ.В любом случае, я не знаю, как это сделать.
Вот код:
package com.example.TimeClockAppreset;
import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.AdapterView.OnItemSelectedListener;
public class TimesEdit extends Activity{
private TimesDbAdapter mDbHelper;
private Long mRowId;
private TextView mDateBox;
private TextView mTimeBox;
private int mYear;
private int mMonth;
private int mDay;
private int mHour;
private int mMinute;
static final int TIME_DIALOG_ID = 0;
static final int DATE_DIALOG_ID = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDbHelper = new TimesDbAdapter(this);
mDbHelper.open();
setContentView(R.layout.entry_edit);
mDateBox = (TextView) findViewById(R.id.DateBox);
mTimeBox = (TextView) findViewById(R.id.TimeBox);
Button changeTime = (Button) findViewById(R.id.changeTime);
Button changeDate = (Button) findViewById(R.id.changeDate);
Button confirmButton = (Button) findViewById(R.id.confirm);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.ClockBox_array, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
mRowId = (savedInstanceState == null) ? null :
(Long) savedInstanceState.getSerializable(TimesDbAdapter.KEY_ROWID);
if (mRowId == null) {
Bundle extras = getIntent().getExtras();
mRowId = extras != null ? extras.getLong(TimesDbAdapter.KEY_ROWID)
: null;
}
//updateBoxes();
populateFields();
changeTime.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(TIME_DIALOG_ID);
}
});
changeDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(DATE_DIALOG_ID);
}
});
confirmButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
setResult(RESULT_OK);
finish();
}
});
}
//THIS GETS THE INFO AND POPULATES THE FIELDS
private void populateFields() {
if (mRowId != null) {
Cursor time = mDbHelper.fetchTime(mRowId);
startManagingCursor(time);
mDateBox.setText(time.getString(
time.getColumnIndexOrThrow(TimesDbAdapter.KEY_DATE)));
mTimeBox.setText(time.getString(
time.getColumnIndexOrThrow(TimesDbAdapter.KEY_TIME)));
}
else
updateBoxes();
}
private void updateBoxes() {
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);
updateDateDisplay();
updateTimeDisplay();
}
private void updateDateDisplay() {
mDateBox.setText(
new StringBuilder()
// Month is 0 based so add 1
.append(mMonth + 1).append("-")
.append(mDay).append("-")
.append(mYear).append(" "));
}
private void updateTimeDisplay() {
mTimeBox.setText(
new StringBuilder()
.append(pad(mHour)).append(":")
.append(pad(mMinute)));
}
private static String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}
public class MyOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,
View view, int pos, long id) {
}
@SuppressWarnings("unchecked")
public void onNothingSelected(AdapterView parent) {
// Do nothing.
}
}
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHour = hourOfDay;
mMinute = minute;
updateTimeDisplay();
}
};
private DatePickerDialog.OnDateSetListener mDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
updateDateDisplay();
}
};
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
case TIME_DIALOG_ID:
return new TimePickerDialog(this, mTimeSetListener, mHour, mMinute, false);
}
return null;
}
private void saveState() {
String date = mDateBox.getText().toString();
String time = mTimeBox.getText().toString();
String inOut = "NA";
if (mRowId == null) {
long id = mDbHelper.createEntry(time, date, inOut);
if (id > 0) {
mRowId = id;
}
} else {
mDbHelper.updateTimeTest(mRowId, time, date);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
saveState();
outState.putSerializable(TimesDbAdapter.KEY_ROWID, mRowId);
}
@Override
protected void onPause() {
super.onPause();
saveState();
}
@Override
protected void onResume() {
super.onResume();
populateFields();
}
}
Любая помощь будет признательна.Эта проблема сводит меня с ума, учитывая, что все остальное хорошо.