「プルダウンして更新」を実装しようとして、次の簡単なテスト コードを作成しました (新しい Flash Builder プロジェクトに「空白の」テンプレートを使用して、つまり navbar を使用せずに追加してください)。
スクリーンショット:
TestPull.mxml:
<?xml version="1.0" encoding="utf-8"?>
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
applicationComplete="init()">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.PropertyChangeEvent;
private static const PADDING:uint = 20;
[Bindable]
private var _ac:ArrayCollection = new ArrayCollection();
private function init():void {
updateList();
_list.scroller.viewport.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, handleScroll);
}
private function updateList():void {
_ac.source = new Array();
for (var i:int = 0; i < 42; i++) {
_ac.source.push(Math.random());
}
_ac.refresh();
}
private function handleScroll(e:PropertyChangeEvent):void {
if (e.source == e.target && e.property == "verticalScrollPosition") {
trace(e.property, ': ', e.oldValue, ' -> ', e.newValue);
if (e.newValue < -2 * PADDING &&
e.oldValue >= -2 * PADDING) {
_hint.visible = true;
setTimeout(hideHint, 2000);
//updateList();
}
}
}
private function hideHint():void {
_hint.visible = false;
}
]]>
</fx:Script>
<s:List id="_list"
dataProvider="{_ac}"
width="100%"
height="100%" />
<s:Label id="_hint"
text="Pull down to refresh..."
width="100%"
textAlign="center"
fontStyle="italic"
backgroundColor="#FFFFCC"
paddingTop="{PADDING}"
paddingBottom="{PADDING}"
visible="false" />
</s:Application>
これはうまく機能しているようで、_hint
可視性はプルごとに 1 回だけ切り替えられます (これはトレースで確認しました)。
ただし、上記の呼び出しのコメントを外すupdateList()
と (Web サーバーからのデータ フェッチをシミュレートします)、すべてが壊れ、 が何hint.visible=true
度も設定され、_list
ちらつきます。
私のかわいそうな男の引っ張りをリフレッシュする方法を修正する方法を誰か提案してください。