samedi 6 avril 2013

Les ListView et le recyclage



Qu'est ce que le recyclage?

Sur certaines plateformes (Blackberry Java par exemple), chaque cellule était rajoutée dans l'écran. C'est simple et performant... tout du moins tant que l'on implémente pas l'Infinite Scroll qui pourrait nous mener à une consommation mémoire bien trop importante.
(D'expérience si les cellules étaient simples on pouvait tout de même avoir des centaines voire des milliers de cellules sans aucun soucis sur un Curve 8520)

Les ListView des plateformes modernes (ios, Android, BB10) utilisent le concept de recyclage. Dès que la cellule est éloignée de la portion visible de la liste, elle est supprimée de l'écran. Mais on la conserve en mémoire pour pouvoir la réutiliser sans réinstancier tout les objects la composant.
Lorsque l'utilisateur scrolle dans la liste, les cellules qui vont apparaitre sont en fait les cellules précédemment enlevées, replacées dans l'écran et avec des valeurs mises à jour à partir des données de la nouvelle cellule.

SDK BB10: Le ListItemManager gère la création de cellule et leur recyclage


Eviter les problèmes de rafraichissement

Lancer Appworld sur votre BB10 avec une appli comportant de nombreux commentaires. Scrollez dans les commentaires et remonter en haut. Vous ne voyez pas un truc étrange? Là où il y avait 4 étoiles il y en maintenant 5 (par exemple).

C'est typiquement une erreur provenant d'une liste mal recyclée. Pour comprendre d'où elle vient, il faut comprendre comment l'updateItem (cf shéma ci-dessus) fonctionne. Prenez ce code:

ListView { dataModel: XmlDataModel { source: "model.xml" } listItemComponents: [ ListItemComponent { type: "contact" Container { id: itemRoot ImageView { onCreationCompleted: { if(ListItemData.value == 0){ image = "asset:///images/starOff.png" } else{ image = "asset:///images/starOn.png" } } } Label { text: ListItemData.name } } } ] }

L'essence de l'erreur vient du traitement réalisé pendant le onCreationCompleted: cette méthode n'est appelée que à la création de la cellule. Le texte, lui est bien mis à jour: il faut dont toujours privilégier le binding.


Solution

[Modification du post précédent, il existe une solution plus propre et simple]

Très bien, nous utilisons donc juste le mauvais slot. Il suffit alors de récupérer le signal datachanged dans le code de la cellule, et modifier l'image ici:
Container {
id: itemRoot ImageView { id: image}
Label { text: ListItemData.name } 
ListItem.onDataChanged: { if(ListItemData.value == 0){ image = "asset:///images/starOff.png" } else{ image = "asset:///images/starOn.png" } } }




mardi 5 février 2013

Blackberry SDK beta 10.1

UpgradingTo10.0LPlbig
Bonjour ,  ca fait un bout de temps que nous n'avons pas écris sur le blog. En effet, nous sommes en train de faire un autre site , qui je l'espère , sera au top du top pour vous informer des news blackberry dev .
On a oublié de poster sur la sortie officiel de blackberry 10 le 30 janvier dernier . Mais si vous suivez ce blog, il est inutile de vous le rappeler. Il y a une autre news plus intéressante. Le découvre ce midi , la mise en ligne du SDK 10.1 beta ! Cette version apporte principalement un support pour la serie Q10, le blackberry avec clavier . Par exemple les keyboard shortcut, permettant de gérer des raccourci clavier , ou encore les assets selector, vous permettant d'utiliser tel image en fonction de la résolution.
A part le support des serie Q10, on note également plusieurs mise à jour très attendu. Comme l'API de cartographie et l'affichage des geo markers ( au bonheur de fredoust), les custom pickers , ou encore les profiler qml.

This image shows a folder structure that's compatible with the static asset selector.
Utiliser des assets en fonction de la résolution 

lundi 28 janvier 2013

Afficher une QImage dans une ImageView

Pour afficher une QImage dans une ImageView vous pouvez utilisé la classe ImageData :
https://developer.blackberry.com/cascades/reference/bb__imagedata.html

Voila une petit peu de code pour vous aider :

Welcome Home Connections{} !

Pour ceux qui, comme moi, apprécie le composant QML de QtQuick : Connections{}, qui, rappelons le, permet d'établir des connexions avec des signaux QML et C++, il est toujours possible de l'utiliser avec Cascades.

Liens vers la doc!

Pour cela rien de plus simple :
- ajouter import QtQuick 1.0
- ajouter Connections{} dans attachedObjects[]

Cascade : Icônes officiel disponible

RIM vient de mettre à disposition sur son site, les icones de cascade. Vous allez enfin pouvoir faire une application native !

lundi 14 janvier 2013

Faire son WebView



Envie d’intégrer un browser à votre application  ? Il y a en principe les Invocation qui devrait marcher. Mais pour l'instant, tout ce qu'on voit c'est le navigateur qui se lance dans une autre instance. Pas très blackberry Flow tout ça. Bref, Voici comment faire pour integrer une WebView dans votre appli, avec PINCH et SCROLL ! En faite, c'est tout simple, mais faut le savoir.. Mettre la WebView dans un ScrollView, et paramétrer ! 



  



Blackberry 10 limited edition

TITLE_IMAGE


Si vous avez publier au moins 2 applications sur le blackberry world store avant le 21 janvier prochain, alors il vous reste une dernière chance pour recevoir le blackberry 10 limited edition, ( qui en croire certain serait la version 720x720 ) . Tout ce passe à cette adresse :  Limited Edition BlackBerry 10 smartphone trade in program . 
Si vous êtes acceptez , vous devrez renvoyer votre ancien blackberry alpha device. Mais attention, étant donnée que la livraison des limited edition se fera 6 à 8 semaine après la sortie officiel ( 30 juin) , je vous conseil d'attendre, sous peine de ne plus avoir "votre precieux" pour développer.