Come si crea uno spinner Android che apre una finestra di dialogo di selezione data?Come creare uno spinner di date su Android
Voglio uno Spinner simile a quello nell'app del calendario, come mostrato nello screenshot qui sotto.
Quello che ho già provato:
ho fatto una selezione in mio layout XML e ha cercato di impostare l'attributo onclick di chiamare un metodo che mostra la finestra di dialogo. Quando inserisco il nome di un metodo in "on click", ho ricevuto un errore che dice "Non è stato possibile trovare le seguenti classi: - Spinner (Passare a android.widget.Spinner, Correggi percorso di creazione, Modifica XML)".
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="showDatePickerDialog" />
showDatePickerDialog è nella classe giusta:
public void showDatePickerDialog(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getFragmentManager(), "Date");
}
E questo è DatePickerFragment (copiato da un altro sito):
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
}
}
SOLUZIONE:
ho trovato la soluzione a another question.
ho usato un filatore regolare nel file di layout, poi nella mia classe di attività, ha questo codice:
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);
Sembra un po 'hacked, ma funziona. Qualcuno sa un modo più pulito per farlo? Non mi ha permesso di impostare setOnClickListener() o setOnItemClickListener() sulla casella di selezione.
La tua domanda è molto ampia, almeno mostraci cosa hai già provato. Non puoi aspettarti che restiamo lì per ore a pensare a metodi complessi per te. Scrivi il tuo codice, quindi se hai qualche problema o errore, torna QUI. –