アクティビティでは、サーバーからデータを取得しています。TableRow
レイアウト xml ファイルで事前に定義された追加のビューを含む限られた数の があり、すべて に設定されていandroid:visibility="gone"
ます。さらに、Java クラスにはこれらのすべての ID を持つ配列がありTableRow
ます。「データ入力」を入力するたびに、そのような を入力しTableRow
、表示してアニメーション化します (アニメーションは、ランダムに選択された垂直方向からの「押し込み」です)。この質問の後半で重要になるさらなるヒントとして、サーバーから取得するすべてのデータ パケットは 1 か月に関連しています。
データを取得するたびに、次のプロセスを実行します
- まだ見えない
TableRow
s に情報を入力します - ステップ 1 が実行されるたびに、ブール配列の値が
true
- 電話
showAnimation()
- ブール配列で true であるすべてのエントリについて、id 配列の
TableRow
インデックスi
を取得し、アニメーションを設定し、可視性を可視に設定します
これはうまくいきます。アニメーションを開始する前に可視性が設定されていても、アニメーションがすでに開始されているほど時間がかからないため、問題ではありません。
ここで問題が発生します。逆の方法は機能しません。明確にさせてください:私は、TableRow
sがウィンドウから押し出され、目に見えないrespに設定されることを望んでいます。実際の月を変更するたびに、新しいエントリがプッシュされます。問題は、アニメーションが開始されるとすぐに、View
s が非表示/削除に設定されることです。ここで最初の回答でAnimationListener
説明したようなものでこれを解決しようとしました。これにより、次の 2 つの方法が考えられます。
AnimationListener
そのようなfor eachを定義TableRow
し、 で可視性を設定しonAnimationEnd()
ます。これは動的ではないため、非常に醜いことがわかりました。- の一種のインデックスにアクセスし
AnimationListener
、同じリスナーをすべてTableRow
のアニメーションに設定します。ここで、これをどのように解決できるかわかりません。前に発見したように、アニメーションをView
ループ (私の場合は for ループ) 内のセットに設定すると、アニメーションが設定されるたびにではなく、ループが終了したときにアニメーションが開始されます。そのため、その for ループでグローバル インデックス変数を使用して で使用したonAnimationEnd()
としても、明らかに何も起こりません。
誰かがこれを実装するより良い方法を知っていますか? 新しいデータがサーバーから既に取得されている可能性があるため、新しいエントリが既に表示されている可能性があるため、 a で解決してもうまくいきHandler.postDelayed()
ません (したがって、新しいエントリは非表示に設定されます)。