4

Je suis donc dans ce domaine depuis un moment et je n'arrive pas à le comprendre. Je suis assez nouveau au développement d'Android, alors gardez avec moi s'il vous plaît. Je n'étais pas trop familier avec la création d'un datpicker et j'ai appris à le faire à la manière obsolète juste pour avoir le coup de main. Utilisé ce tutoriel pour me lever à la vitesse:Comment faire un DatePicker avec DialogFragment et FragmentManager?

http://developer.android.com/resources/tutorials/views/hello-datepicker.html

Mais maintenant je dois changer, surtout de ne pas utiliser le code désapprouvée, donc je regardais tout autour, et j'ai trouvé 2 tutoriels, principalement celui-ci bien :

http://www.kylebeal.com/2011/11/android-datepickerdialog-and-the-dialogfragment/

Le problème est, il y a un code qui n'a pas de sens. Principalement cette partie.

//create new DateDialogFragment 
DateDialogFragment ddf = DateDialogFragment.newInstance(this, R.string.set_date, date); 

ddf.setDateDialogFragmentListener(new DateDialogFragmentListener() { 

    @Override 
    public void dateDialogFragmentDateSet(Calendar date) { 
     // update the fragment 
     mDateDetailFragment.updateDate(date); 
    } 
}); 

ddf.show(getSupportFragmentManager(), "date picker dialog fragment"); 

qui est supposé être ce qui est en cours d'exécution dans la classe d'activité qui fonctionne dans Alors je me genre de ce qu'il se passe dans le reste du code, et ne hésitez pas à regarder le reste comme cela va probablement aider. Le code suit essentiellement la même route que le code original showDialog(). Implémentation DatePickerDialog.onDateSetListener, et en retournant un nouveau DatePickerDialog, avec l'exception évidente c'est l'utilisation d'un DialogFragment. Mais c'est là que je me suis perdu.

Une partie de la raison est parce que je ne suis pas vraiment sûr onCreateDialog() renvoie ce nouveau DatePickerDialog. Si vous regardez le code que j'ai dit n'a pas de sens, à la fois mDateDetailFragment et getSupportFragmentManager() n'ont jamais été instanciés ou sont apparus ailleurs, donc je ne peux pas obtenir le code du tutoriel pour fonctionner même. L'Android Doc mentionne également qu'au lieu d'utiliser showDialog() je devrais utiliser à la fois DialogFragment et FragmentManager, ce qui n'est pas fait ici. Uniquement DialogFragment.

Tout comme le titre, comment puis-je faire un DatPicker sous forme non-déprimée? Je voudrais s'il vous plaît demander à PAS envoyez-moi à un lien et juste dire regarder ici. J'ai fait ça. Crois moi. Si non, expliquez au moins ce que j'ai manqué qui rend cela logique. En outre, si quelqu'un peut réellement me dire où la méthode onCreateDialog() envoie le DatePickerDialog, ce serait extrêmement utile aussi bien. J'essaie juste de donner un sens à tout cela, plutôt que de copier et coller du code (pas que ça marche de toute façon). Merci beaucoup d'avoir pris le temps de lire ceci, et si des éclaircissements sont nécessaires, veuillez demander.

Répondre

4

Aller dans l'ordre de votre message ... \

1) la onCreateDialog retourne la boîte de dialogue à l'DialogFragment.

2) Je ne connais pas la ligne mDateDetailFragment.updateDate(date); ... Je pense qu'il a peut-être laissé du code. EDIT Trouvé, il est dans l'une des classes dans le fichier zip pour sa démo complète.

3) Vous utilisez le gestionnaire de fragments (c'est la partie getSupportFragmentManager()):

ddf.show(getSupportFragmentManager(), "date picker dialog fragment"); 

Ok, cela dit, voici comment je l'ai fait (j'utilise un DateSlider, mais substratum dans un Datepicker à sa place devrait être assez simple pour vous).

Dans le fragment/activité appelant le DialogFragment:

DialogFragment newFragment = new DateDialog(); 
newFragment.show(getFragmentManager(), "dialog"); 

Et mon DialogFragment:

public class DateDialog extends DialogFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 
    private DateSlider.OnDateSetListener mDateSetListener = new DateSlider.OnDateSetListener() { 
     public void onDateSet(DateSlider view, Calendar selectedDate) { 
      MemberAddFragment.startTxt.setText(String.format("%tB %te, %tY", selectedDate, selectedDate, selectedDate)); 
     } 
    }; 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     final Calendar c = Calendar.getInstance(); // Get calendar instance to use in DateSlider 
     return new AlternativeDateSlider(getActivity(),mDateSetListener,c,null,null); // return DateSlider dialog to DialogFragment 
    } 
} 

Hope this helps éclaircir votre confusion.

+0

Vraiment envie d'apprécier le temps que vous avez pris! Une chose que je ne comprends pas, comment 'getSupportFragmentManager()' obtient le FragmentManager? Est-ce dans son code? J'aurais probablement dû le remarquer. Je me sens stupide pour pas. – Andy

+0

C'est * IS * le gestionnaire de fragment (lors de l'utilisation de la bibliothèque de support). Ce serait 'getFragmentManager' si vous n'utilisiez pas la bibliothèque de support. Quelle que soit la version que vous utilisez, c'est un appel à la structure pour vous donner un gestionnaire de fragment. – Barak

+0

Grattez ça! Je l'ai trouvé. Classe d'activité Je n'ai pas supposé cela. – Andy

0

Auteur de la poste ici: On dirait que vous avez tout compris. J'ai répondu à vos questions sur mon post avant de trouver cela, mais Barak fait un excellent travail pour y répondre. Si vous ne l'avez pas déjà fait, téléchargez la source complète de l'exemple d'application. Je pense que cela aidera à remplir tous les blancs manquants que vous avez encore.

+0

Haha, oh merci! Oui, très apprécié. – Andy

+0

J'ai finalement eu l'occasion d'y jeter un coup d'œil. Je vois pourquoi je suis confus. Et je vais de mieux en mieux, mais je n'ai jamais utilisé de fragments, et la façon dont le DatePicker s'intègre avec lui me déroute plus que jamais. Je vais continuer à le tremper et le disséquer pour le rendre plus compréhensible car j'ai besoin de l'apprendre, mais si vous avez la possibilité de m'envoyer un email, que j'ai fourni sur votre blog et m'aider plus à fond, ce serait génial. Si non, je comprends parfaitement, et je suis reconnaissant pour le poste pour commencer, qui a beaucoup aidé. Passez une bonne journée. – Andy

3

Je sais que cette question est à moi et a déjà une réponse. Mais je pensais que j'ajouterais ma propre réponse aux autres qui cherchent de l'aide sur ce même problème. J'ai simplifié l'exemple de code que j'ai fourni ci-dessus en seulement 2 classes. Kbeal, qui était assez aimable pour fournir le tutoriel a fait un excellent travail, mais il était trop gonflé avec des informations qui n'étaient même pas nécessaires. Donc en utilisant ce que je savais des dialogues et ce que j'ai appris de ce que j'ai pu comprendre du tutoriel de Kbeal ainsi que la recherche que j'ai faite sur les fragments, j'ai fourni mon implémentation depuis un DatePickerDialog sur mon GitHub.

https://github.com/Zeroe31890/DateDialogFragment

Tout ce que vous avez honnêtement à faire est de lancer tout droit après seulement copier et coller les 2 classes, la mise en page simple, et la modification du fichier Manifest Android. Beaucoup plus facile que tous les autres tutoriels. Oh, et si quelqu'un voit quelque chose qui peut être mieux fait, s'il vous plaît faire. Prendre plaisir!

+0

Merci pour l'aide :) –

+0

Cela s'est avéré plus proche de travailler sur une rotation d'écran que tout autre exemple que j'ai trouvé (le plus écrasé au lieu de ne pas mettre à jour l'activité d'appel avec la valeur). Au prix de la fexibilité, j'ai réussi à le faire fonctionner en passant l'identifiant du bouton au lieu d'un rappel et en utilisant 'getActivity.findViewById()' dans 'onDateSet()' pour obtenir le bouton afin que je puisse appeler ' setText() ' –

Questions connexes