[英]How do I programmatically extract values from DatePicker/TimePicker Spinners in Android?
我最初按照android開發人員上的教程進行操作,但是由於我打算在頁面上每個設置2個,因此我認為從選擇器中提取值會更加優雅。 我首先在XML中使用了onClick方法。 但是,現在,我嘗試按下按鈕(btn_schedule_adventure)后拉取值。 嘗試設置DateView時出現錯誤
DatePicker startDatePicker = (DatePicker) findViewById(R.id.picker_start_date);
我下面的代碼引發錯誤。 我如何:1-將值從日期/時間選擇器中拉出(繞過下面的錯誤)2-同時保持默認的時間/日期
提前致謝。
錯誤:
05-26 04:27:44.084: E/AndroidRuntime(798): FATAL EXCEPTION: main
05-26 04:27:44.084: E/AndroidRuntime(798): java.lang.ClassCastException: android.widget.Button cannot be cast to android.widget.DatePicker
05-26 04:27:44.084: E/AndroidRuntime(798): at com.scarr025.zwilio.AdventureSetUp$1.onClick(AdventureSetUp.java:40)
05-26 04:27:44.084: E/AndroidRuntime(798): at android.view.View.performClick(View.java:4204)
05-26 04:27:44.084: E/AndroidRuntime(798): at android.view.View$PerformClick.run(View.java:17355)
05-26 04:27:44.084: E/AndroidRuntime(798): at android.os.Handler.handleCallback(Handler.java:725)
05-26 04:27:44.084: E/AndroidRuntime(798): at android.os.Handler.dispatchMessage(Handler.java:92)
05-26 04:27:44.084: E/AndroidRuntime(798): at android.os.Looper.loop(Looper.java:137)
05-26 04:27:44.084: E/AndroidRuntime(798): at android.app.ActivityThread.main(ActivityThread.java:5041)
05-26 04:27:44.084: E/AndroidRuntime(798): at java.lang.reflect.Method.invokeNative(Native Method)
05-26 04:27:44.084: E/AndroidRuntime(798): at java.lang.reflect.Method.invoke(Method.java:511)
05-26 04:27:44.084: E/AndroidRuntime(798): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-26 04:27:44.084: E/AndroidRuntime(798): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-26 04:27:44.084: E/AndroidRuntime(798): at dalvik.system.NativeStart.main(Native Method)
方法
public class AdventureSetUp extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Remove title bar
//this.requestWindowFeature(Window.FEATURE_NO_TITLE);
Log.d("$$LOGCHECK$$", "In onCreate");
setContentView(R.layout.activity_adventure_set_up);
Button btnScheduleAdventure = (Button) findViewById(R.id.btn_schedule_adventure);
btnScheduleAdventure.setOnClickListener(new View.OnClickListener() {
//perform your action here
public void onClick(View v) {
// Get adventure title
EditText btnScheduleAdventure = (EditText) findViewById(R.id.adventure_title);
String adventureTitle = btnScheduleAdventure.getText().toString();
// Get adventure start date
DatePicker startDatePicker = (DatePicker) findViewById(R.id.picker_start_date);
int startDay = startDatePicker.getDayOfMonth();
int startMonth = startDatePicker.getMonth();
int startYear = startDatePicker.getYear();
Log.d("$$LOGCHECK$$", "Clicked Schedule Adventure");
Log.d("$$LOGCHECK$$", "Title: " + adventureTitle);
Log.d("$$LOGCHECK$$", "Start Date: " + startMonth + "-" + startDay + "-" + startYear);
Intent newIntent = new Intent();
}
});
}
日期/時間選擇器代碼(來自教程)
//---------------Date/Time Picker Methods-------------------------------------
// Date Picker
public static 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);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
Log.d("$$LOGCHECK$$", "Date Picked--Year:" + year + " Month: " + month + " Day: " + day);
}
}
public void showDatePickerDialog(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getFragmentManager(), "datePicker");
}
// Time Picker
public static class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// Do something with the time chosen by the user
}
}
public void showTimePickerDialog(View v) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(), "timePicker");
}
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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".AdventureSetUp" >
<EditText
android:id="@+id/adventure_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/hint_adventure_title"
android:inputType="textEmailAddress" />
<Button
android:id="@+id/picker_start_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_adventure_start_date"
android:onClick="showDatePickerDialog" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_adventure_start_time"
android:onClick="showTimePickerDialog" />
<Button
android:id="@+id/picker_end_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_adventure_end_date"
android:onClick="showDatePickerDialog" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_adventure_end_time"
android:onClick="showTimePickerDialog" />
<Button
android:id="@+id/btn_schedule_adventure"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_schedule_adventure"
android:onClick="scheduleAdventure" />
</LinearLayout>
您的問題已在此處明確說明:
05-26 04:27:44.084: E/AndroidRuntime(798): java.lang.ClassCastException: android.widget.Button cannot be cast to android.widget.DatePicker
因為您正在檢索此按鈕:
<Button
android:id="@+id/picker_start_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_adventure_end_date"
android:onClick="showDatePickerDialog" />
作為此處的DatePicker:
DatePicker startDatePicker = (DatePicker) findViewById(R.id.picker_start_date);
所以改變這個:
DatePicker startDatePicker = (DatePicker) findViewById(R.id.picker_start_date);
通過:
Button startDatePicker = (Button) findViewById(R.id.picker_start_date);
這不是提取值的正確方法。
當您單擊DatePickerDialog中的Set按鈕時,將自動調用onDateSet
方法。
當您在DatePickerDialog中單擊Set時,是否可以在Logcat
看到此行。
Date Picked--Year:" + year + " Month: " + month + " Day: " + day
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.