¿Cómo creo un spinner de Android que abre un cuadro de diálogo de selector de fecha?Cómo hacer un spinner de fecha en Android
Quiero un Spinner que se parece al de la aplicación de calendario, como se muestra en la captura de pantalla a continuación.
lo que ya he intentado:
Hice una ruleta en mi XML disposición y trataron de establecer el atributo onclick para llamar a un método que muestra el cuadro de diálogo. Cuando puse un nombre de método en "al hacer clic", obtuve un error que dice "No se encontraron las siguientes clases: - Spinner (Cambiar a android.widget.Spinner, Fix Build Path, Edit XML)".
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showDatePickerDialog" />
showDatePickerDialog está en la clase derecha:
public void showDatePickerDialog(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getFragmentManager(), "Date");
}
Y esto es DatePickerFragment (copiado de otro sitio web):
import java.util.Calendar;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.widget.DatePicker;
public 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
}
}
SOLUCIÓN:
he encontrado la solución a another question.
que utiliza una ruleta regular en el archivo de diseño, a continuación, en mi clase de actividad, tiene este código:
dateSpinner = (Spinner)findViewById(R.id.spinner_date);
View.OnTouchListener Spinner_OnTouch = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
showDatePickerDialog(v);
}
return true;
}
};
View.OnKeyListener Spinner_OnKey = new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
showDatePickerDialog(v);
return true;
}
else {
return false;
}
}
};
dateSpinner.setOnTouchListener(Spinner_OnTouch);
dateSpinner.setOnKeyListener(Spinner_OnKey);
Parece un poco hackeado, pero funciona. ¿Alguien sabe una manera más limpia de hacerlo? No me dejaría establecerOnClickListener() o setOnItemClickListener() en el spinner.
Su pregunta es muy amplia, al menos muéstrenos lo que ya ha intentado. No puede esperar que nos sentemos allí durante horas ideando métodos complejos para usted. Escribe tu propio código, luego si tienes algún problema o error, ENTONCES vuelves aquí. –