Je veux faire ce qui suit:
J'ai une liste avec des objets, qui contiennent une date, je souhaite maintenant utiliser ces objets non seulement pendant une date, je veux définir la date et les réutiliser. La liste sélectionnée contient 5 éléments. P> Comme vous devinez probablement, le journal affiche différentes dates causées par la boucle, mais la liste finale n'a que des éléments ayant la même date. p> log.i me donne: p> et itération via la liste, après que tous les objets ajoutés me donne: P> while((stop.equals(countingDate)) || (countingDate.before(stop))) {
for (c_TakeTimeObjects c_takeTimeObjects : SelectedList) {
c_takeTimeObjects.setsActivityDate(c_HelperClass_CalToStringDate.get(countingDate,0,0,0));
Log.i(TAG, "adjustDateRange: "+ c_takeTimeObjects.getsActivityDate());
editList.add(c_takeTimeObjects);
}
countingDate.add(Calendar.DAY_OF_MONTH, +1);
}
3 Réponses :
Essayez de déplacer cette ligne Je ne comprends pas votre code. Mais pouvez-vous essayer c_taketimeobjects addingoDOBJ = nouveau c_takétimeobjects (1,1, "", true, ceci); code> dans
pour code> ADDFingOBJ = c_taketimeObjects; < / code> p>
EDITList.add (c_taketimeObjects); code> au lieu de
EDITLIST.ADD (addingoDOJ); code> p> p>
Désolé, c'était ce que je voulais poster au début.
Vous vous avez peut-être demandé pourquoi j'ai fait l'objet AddingObj, car je pourrais utiliser C_TAKETIMEOBJECT directement. Mais j'ai fait cela, parce que je pensais que cela peut aider à briser la référence entre ces deux objets.
Oui vous avez raison. Je me demande quel est le résultat de c_helperclass_caltostringdate.get (compteringdate, 0,0,0) code>?
J'ai fait cette aide, pour obtenir une date de chaîne (format dd.mm.yy) de la valeur de calendrier. Les valeurs INT dans le dos ne sont que quelques jours, mois ou années, vous souhaitez ajouter ou soustraire du calendrier que vous passez à l'avant.
Ok, faisons comme ceci: C_TAKETTIMEOBjects AddingoDOBJ = Nouveau c_taketimeObjects (1,1, "", vrai, ceci); AddingoDOBJ.SetSactivityDate (C_HELPERCLASS_CALTOSTOSTRINGDATE.GET (ComptageDate, 0, 0, 0)); code>
Permettez-moi de deviner: votre , vous remplacez toujours votre variable ou vous implémentez l'interface clonable p> edit strong>
Disons que vos 5 cas dans la liste sélectionnée sont A, B, C, D, E addingoDOBJ est F. Puis avec p> sélectionnée code> ne contient que 1 élément, non?
En fait, en faisant addingoDOBJ code> avec
c_taketimeobjects code> donc à la fin, vous avez ajouté 5 fois la même instance ( c_taketimeObjects) à votre
Edition code> (et vous avez même modifié le contenu de votre
sélectionnée code>)
de
Donc, vous créez une nouvelle instance et copiez les attributs dont vous avez besoin manuellement p>
1ère itération: avec p> addingObj = c_takeTimeObjects
sélectionnéeList code> a 5 éléments dans mon exemple.
Donc, je ne comprends pas comment log.Je peut afficher des dates différentes: le jour du mois est augmenté à l'extérieur de la boucle
L'augmentation du champ n'est pas du mois, c'est le jour du mois.
J'ai déjà édité mon commentaire mais cela ne change pas le fait que compteringdate code> n'est jamais modifié dans la boucle
@Oliver Le jour du mois doit être attribué à tous les éléments de la liste et que l'incrément. Après cela, il devrait être attribué à tous les éléments de la liste et ainsi de suite.
Après avoir vu vos journaux mises à jour, je confirme que ma première réponse est correcte: vous avez ajouté 4 fois les 5 instances de votre sélectionnée sélectionnée et vous avez modifié la date de ces 5 instances à la dernière date = 28.06.2019. Seulement en créant des copies de ces instances peut résoudre votre problème
@Oliver Comment impliqueriez-vous une interface clothèque?
Juste ce Classe publique C_TAKETTIMEOBjects implémente la clonable code> dans votre déclaration de classe peut suffire. Sinon, vous devrez remplacer la méthode clone () de cette interface.
En fait, il y a aussi des inconvénients à propos de l'utilisation de la clonable, donc pratiquable au contexte dans lequel vous l'utilisez: Stackoverflow.com/questions / 4081858 / About-Java - Clonable . Le point principal ici est de rester en mesure de vous assurer de créer et d'utiliser une nouvelle instance quelle que soit la méthode que vous utilisez.
@Oliver maintenant s'il vous plaît éditer votre réponse et dites-moi pourquoi c_taketimeObjects AddObj = nouveau c_taketimeObject (1,1, "", vrai, this); addobj = c_taketimeObject; ne fonctionne pas, mais: addobj.setsAsactivityDate (c_taketimeobject.getsActivityState ()); Travaux.
Si vous utilisez une arrachelist, rappelez-vous que même si vous ajoutez les objets à une autre arraylist, les deux tableaux feront référence au même objet.
Cela signifie que ce processus va comme: p>
pour chaque itération de la boucle tandis que vous ithétiez la boucle pour la boucle, modifiant l'attribut des objets. Après cela, vous les ajoutez à la nouvelle arraylist. Lorsque vous arrivez à la suivante tandis que l'itération, la boucle de la boucle change à nouveau les valeurs des mêmes objets, que vous ajoutez à nouveau à la nouvelle arrachelist. P>
Essayez cette solution de contournement: p>
génère un constructeur en c_takétimeobjects où vous pouvez passer un objet C_TAKETIMETIMECTS complet, puis modifier le code comme p>
Êtes-vous sûr que
sélectionnée code> contient différents objets non seulement de multiples références à un seul objet? Et s'il vous plaît, écrivez votre code ayant des directives de code Java à l'esprit.
La liste sélectionnée contient des objets de la classe
c_taketimeobjects code> et ils ont toutes des valeurs différentes attribuées. Comme le démarrage et l'arrêt du temps ou du statut. Dans mon exemple, la sélection sélectionnée a 5 objets.
J'ai ajouté le journal complet.I. avec la liste sélectionnée ayant 5 éléments