这是我正在使用的代码片段。我正在为 android 制作一个应用程序,除了这个问题之外,一切都很好,谷歌在这方面并不是我的朋友。我已经强调了重要的部分。问题是当 TextViews 使用 updateboxes() 方法加载数据时,一切正常。当他们加载了 populateFields(); 方法时间或日期选择器无法识别这些值,因为它们直接来自数据库,而不是像 updateboxes() 方法那样使用 stringBuilder 构建的。
字符串不是我的强项,我唯一能想到的就是将字符串分解为单独的 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();
}
}
任何帮助,将不胜感激。考虑到其他一切都很好,这个问题让我发疯了。