Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Android: Cómo obtener valores de la selección de fecha y hora

Estoy construyendo una aplicación en la que estoy tratando de pedir al usuario que seleccione el tiempo, por lo que utiliza datePicker y timePicker y un button set . Así que cuando haga clic en el set button un dialog box viene y decir como usted ha seleccionado x fecha y hora x o de alguna manera un mensaje debe aparecer en la pantalla como el usuario ha seleccionado esta vez. Así que he construido el código, pero como mi aplicación viene a esa actividad siempre se detuvo con fuerza. No hay ningún problema con el xml file relacionados con la visualización de los datos, porque cuando comentario líneas java de buscar los valores de datePicker y timePicker , la aplicación funciona absolutamente multa. Todavía estoy publicando ambos archivos de código para facilitar la comprensión. También publicar la excepción gato de registro. He quitado todo el código innecesario como la importación y los paquetes y el botón adicional etc. Para hacerlo rápido legible.

Este es el código del archivo .xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="10" android:id="@+id/commonlayout" android:background="#FFFFFF"> <LinearLayout android:id="@+id/llheader" android:layout_width="fill_parent" android:layout_height="20dp" android:layout_weight="1" android:background="@drawable/bg"> <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center"> <!--header--> <TextView android:id="@+id/txt_header" android:layout_width="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true"/> </RelativeLayout> </LinearLayout> <ScrollView android:id="@+id/scrollView1" android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:layout_width="wrap_content" android:id="@+id/linearLayout1" android:orientation="vertical" android:layout_height="wrap_content" <DatePicker android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/datePicker"></DatePicker> <TimePicker android:id="@+id/timePicker" android:layout_width="wrap_content" android:layout_height="wrap_content</TimePicker> <TableRow android:id="@+id/tableRow1" android:layout_height="wrap_content" android:layout_width="match_parent" android:gravity="center"> <Button android:id="@+id/btnSetDateTime" android:layout_height="wrap_content" android:text="Set" android:layout_width="wrap_content"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Next" android:id="@+id/btnNext1" /> </TableRow> </LinearLayout> </ScrollView> <LinearLayout android:id="@+id/lldata" android:layout_weight="8" android:layout_width="fill_parent" android:layout_height="0dp" android:background="#FFFFFF"> </LinearLayout> <LinearLayout android:id="@+id/llfooter" android:layout_width="fill_parent" android:orientation="horizontal" android:layout_height="20dp" android:visibility="visible" android:layout_margin="0dp"> </LinearLayout> 

Este es el código de TimeDate.java :

 public class TimeDate extends Activity { Button btnNext; private TextView dateText; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.time_date); btnNext=(Button)this.findViewById(R.id.btnNext1); btnNext.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent myintent = new Intent(TimeDate.this, Next.class); startActivity(myintent); finish(); } }); ScrollView DTPicker = (ScrollView) View.inflate(TimeDate.this,R.layout.time_date, null); Button btnSet = (Button) DTPicker.findViewById(R.id.btnSetDateTime); final DatePicker dp = (DatePicker) DTPicker.findViewById(R.id.datePicker); final TimePicker tp = (TimePicker) DTPicker.findViewById(R.id.timePicker); btnSet.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String strDateTime = dp.getYear() + "-" + (dp.getMonth() + 1) + "-" + dp.getDayOfMonth() + " "+ tp.getCurrentHour() + ":" + tp.getCurrentMinute();}}); AlertDialog alert = new AlertDialog.Builder(TimeDate.this).create(); alert.setTitle("Reminder"); alert.setView(DTPicker); alert.show(); } } 

Esta es la excepción logcat :

 04-27 11:48:24.830: D/AndroidRuntime(812): Shutting down VM 04-27 11:48:24.830: W/dalvikvm(812): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 04-27 11:48:24.851: E/AndroidRuntime(812): FATAL EXCEPTION: main 04-27 11:48:24.851: E/AndroidRuntime(812): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ogtpl.android/com.ogtpl.android.TimeDate}: java.lang.ClassCastException: android.widget.LinearLayout 

  • Android: Establecer el tiempo en el selector de tiempo con el tiempo mostrado en la vista de texto
  • TimePicker hora no se actualiza después de cambiar a 24h
  • Android get Tiempo UTC actual
  • Calcular la diferencia entre dos veces android
  • 4 Solutions collect form web for “Android: Cómo obtener valores de la selección de fecha y hora”

    No haga nada extra, su código es sólo prefecto. Sólo ScrollLayout quitar el código de ScrollLayout o su atributo dondequiera que estés usando eso. Lemme escribir el código actualizado para usted desde ScrollLayout

      final DatePicker dp = (DatePicker) findViewById(R.id.datePicker); final TimePicker tp = (TimePicker) findViewById(R.id.timePicker); btnSet.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String strDateTime = dp.getYear() + "-" + (dp.getMonth() + 1) + "-" + dp.getDayOfMonth() + " "+ tp.getCurrentHour() + ":" + tp.getCurrentMinute(); Toast.makeText(TimeDate.this, "User selected " + strDateTime + "Time", Toast.LENGTH_LONG).show(); //Generate a toast only if you want finish(); // If you want to continue on that TimeDateActivity // If you want to go to new activity that code you can also write here }}); 
     ScrollView DTPicker = (ScrollView) View.inflate(TimeDate.this,R.layout.time_date, null); Button btnSet = (Button) DTPicker.findViewById(R.id.btnSetDateTime); final DatePicker dp = (DatePicker) DTPicker.findViewById(R.id.datePicker); final TimePicker tp = (TimePicker) DTPicker.findViewById(R.id.timePicker); 

    Reemplace la línea anterior por debajo

     ScrollView DTPicker = (ScrollView)findViewById(R.id.scrollView1); Button btnSet = (Button)findViewById(R.id.btnSetDateTime); final DatePicker dp = (DatePicker)findViewById(R.id.datePicker); final TimePicker tp = (TimePicker)findViewById(R.id.timePicker); 

    Su problema parece estar en esta línea:

     ScrollView DTPicker = (ScrollView) View.inflate(TimeDate.this,R.layout.time_date, null); 

    Está inflando un XML que contiene LinearLayout como el nodo raíz, sin embargo, se está LinearLayout Casting a ScrollView haciendo que ClassCastException .

    Intenta seguir el código …

    Time_date.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="10" android:id="@+id/commonlayout" android:background="#FFFFFF"> <LinearLayout android:id="@+id/llheader" android:layout_width="fill_parent" android:layout_height="20dp" android:layout_weight="1"> <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center"> <!--header --> <TextView android:id="@+id/txt_header" android:layout_width="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_height="wrap_content" /> </RelativeLayout> </LinearLayout> <ScrollView android:id="@+id/scrollView1" android:layout_width="wrap_content" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:layout_width="wrap_content" android:id="@+id/linearLayout1" android:orientation="vertical" android:layout_height="wrap_content"> <DatePicker android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/datePicker" /> <TimePicker android:id="@+id/timePicker" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TableRow android:id="@+id/tableRow1" android:layout_height="wrap_content" android:layout_width="match_parent" android:gravity="center"> <Button android:id="@+id/btnSetDateTime" android:layout_height="wrap_content" android:text="Set" android:layout_width="wrap_content" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Next" android:id="@+id/btnNext1" /> </TableRow> </LinearLayout> </ScrollView> <LinearLayout android:id="@+id/lldata" android:layout_weight="8" android:layout_width="fill_parent" android:layout_height="0dp" android:background="#FFFFFF"> </LinearLayout> <LinearLayout android:id="@+id/llfooter" android:layout_width="fill_parent" android:orientation="horizontal" android:layout_height="20dp" android:visibility="visible" android:layout_margin="0dp"> </LinearLayout> </LinearLayout> 

    DateTimeActivity.java

     public class DateTimeActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.time_date); setTitle("Reminder"); Button btnNext = (Button) findViewById(R.id.btnNext1); btnNext.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent myintent = new Intent(DateTimeActivity.this, Next.class); startActivity(myintent); finish(); } }); Button btnSet = (Button) findViewById(R.id.btnSetDateTime); final DatePicker dp = (DatePicker) findViewById(R.id.datePicker); final TimePicker tp = (TimePicker) findViewById(R.id.timePicker); btnSet.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String strDateTime = dp.getYear() + "-" + (dp.getMonth() + 1) + "-" + dp.getDayOfMonth() + " "+ tp.getCurrentHour() + ":" + tp.getCurrentMinute(); Toast.makeText(DateTimeActivity.this, "User has selected " + strDateTime, Toast.LENGTH_LONG).show(); finish();// move to previous activity }}); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.