Android texte spinner avec sélecteur de date
Je suis nouveau sur android mot.
Je suis en train de faire un affichage de texte spinner avec du temps et de sélecteur de date.
- Comment régler l'heure et la date dans l'affichage de texte par défaut.
- Après sélectionnez l'heure/la date et cliquez sur bouton "set", pourquoi mon heure/de la date de sélection est vide
voici mon activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:orientation="vertical" >
<TextView
android:id="@+id/startTime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.Holo.Spinner"
android:onClick="showTimePickerDialog"/>
<TextView
android:id="@+id/endTime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.Holo.Spinner"
android:onClick="showTimePickerDialog"/>
<TextView
android:id="@+id/date"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.Holo.Spinner"
android:onClick="showDatePickerDialog"/>
voici mon MainActivity.java
import java.util.Calendar;
import android.os.Bundle;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.TimePickerDialog;
import android.text.format.DateFormat;
import android.view.Menu;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TimePicker;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void showTimePickerDialog(View v) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getFragmentManager(), "timePicker");
}
public void showDatePickerDialog(View v) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getFragmentManager(), "datePicker");
}
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 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
}
}
}
Merci.
- J'ai suivi Android Cueilleurs tutoriel developer.android.com/guide/topics/ui/controls/pickers.html
Vous devez vous connecter pour publier un commentaire.
Le problème que je vois, c'est que votre
DatePickerFragment
etTimePickerFragments
sont statiques et ne peuvent donc pas accéder à votre activité de textviews. Si ils n'étaient pas statiques, puis tout ce que vous devez faire est detimeTextView.setText(...)
à l'intérieur deonTimeSet(...)
méthode. (En passant, leur maintien statique est bon parce que vous pouvez réutiliser dans une autre activité, si vous en avez besoin.)Un moyen de contourner ce problème serait de créer une interface supplémentaire et passer ensuite que votre boîte de dialogue sélecteur de fragments lorsque vous les créez et puis faire un rappel. Mais pourquoi le faire quand OnDateSetListener et OnTimeSetListener interfaces existent déjà?
Je vais me référer uniquement à la DatePickerFragment ci-dessous, mais tous la même chose s'applique à la TimePickerFragment ainsi.
Votre
MainActivity
devrait mettre en œuvreOnDateSetListener
, pas votreDatePickerFragment
. Un de le remplacé les méthodes de OnDateSetListener estonDateSet(...)
où vous définissez la date dans votre TextView. Par exemple:Votre
DatePickerFragment
doit avoir un constructeur qui prend unOnDateSetListener
en tant que paramètre et contient une référence à elle. Voir comment mettre en œuvre votre DatePickerFragment ici https://gist.github.com/2935353Maintenant à l'intérieur de votre
showDatePickerDialog(View v)
, passez votre MainActivity (qui est aussi un OnDateSetListener) comme ceci:Puis, quand l'heure est réglée, votre MainActivity qui implémente 'OnDateSetListener" seront un rappel et votre textview sera mis à jour.
Espère que cela efface un peu les choses.
P. S. Vous devez aussi avoir le constructeur vide dans le
DatePickerFragment
, il va empêcher votre application à partir de la plante lors de la rotation de l'appareil.vous devriez écrire instruction pour afficher la date/l'heure sur TextView. et
définir comme variable de classe.
et