2013-08-13 15 views
6

Ich habe eine Listenansicht, die mit 50 Elementen beginnt, und ich möchte mehr hinzufügen, während der Benutzer durch die Liste blättert, aber bevor sie das Ende der Liste erreichen. Ich habe die atEnd-Eigenschaft verwendet, um zu wissen, wann ich am Ende der Liste bin, und an dieser Stelle weitere Elemente hinzuzufügen, aber ich fange lieber an, neue Elemente hinzuzufügen, wenn ich 50% - 75% der Strecke nutze durch die Liste, so dass der Benutzer ist weniger wahrscheinlich auf weitere Daten wartenWie kann ich mehr Elemente zu einem ListView hinzufügen, bevor das Ende der Liste in einer BB10 App erreicht wird?

Antwort

7

Sie können das onFirstVisibleItemChanged Signal verwenden, um herauszufinden, wie weit durch die ListView Sie sind. Verwenden Sie das erste Sichtfeld und die aktuelle Größe des Datenmodells, um Ihre aktuelle Position in der Liste zu ermitteln. Wenn diese Position innerhalb der von Ihnen festgelegten Grenzen liegt (50% und 75% in meinem Beispielcode), führen Sie Code aus, um weitere Elemente zum Datenmodell hinzuzufügen.

Legen Sie keine genaue Zahl fest, da das Signal nicht genau 50% des Weges durch die Liste einfangen kann, und Sie sollten auch prüfen, ob Sie das Ende der Liste als ausfallsicher für den Fall treffen Der Benutzer fliegt über den festgelegten Bereich hinaus.

ListView { 
dataModel: listDataModel 
objectName: "listView" 
attachedObjects: [ 

    ListScrollStateHandler { 
     property int position 
     id: scrollStateHandler 
     onScrollingChanged: { 

      if (atEnd) { 
       //code to run if you hit the end of the list 
      } 
     } 
     onFirstVisibleItemChanged: { 
      if (position < firstVisibleItem) { 
       console.log("Scrolling Down") 
       var size = listDataModel.size(); 
       var percent = firstVisibleItem/size * 100; 
       console.log("Percent: " + percent + "%"); 
       if (50 < percent < 75) { 
        //do stuff 
       } 
      } else if (position > firstVisibleItem) { 
       console.log("Scrolling Up"); 

      } 
      position = parseInt(firstVisibleItem); 
     } 
    } 
]} 
+0

Große Antwort danke! Daran hätte ich nie selbst gedacht – krilovich