データベースからの情報を表示するカスタムアダプタを備えたListViewがあります。 私は、アプリケーションを起動すると、データは、データベースから読み取られ、アダプタに与えられ、その後、ListViewに添付されます。 LayoutAnimationControllerはListView上で実行され、コンテンツをスムーズに表示します。Android Listviewが更新されない
this._lvList = (ListView)_v.findViewById(R.id.lvList);
this._lvList.setAdapter(new TableAdapter(getActivity(),R.layout.tablerow,Category.getCategories()));
LayoutAnimationController lac = new LayoutAnimationController(AnimationUtils.loadAnimation(getActivity(), R.anim.slide_in_left));
lac.setDelay(0.2f);
this._lvList.setLayoutAnimation(lac);
this._lvList.startLayoutAnimation();
まったく問題ありません。
ListViewのいずれかの項目をクリックすると、クリックされなかった項目が消え、クリックされた項目はリスト内の唯一の項目になり、上に表示されます。
View v;
for(int i = 0;i<_lvList.getChildCount();i++) {
v = this._lvList.getChildAt(i);
if(v!=clickedView) {
Animation animSlideOut = AnimationUtils.loadAnimation(getActivity(), i%2==0?R.anim.slide_out_left:R.anim.slide_out_right);
animSlideOut.setStartOffset(i*50);
// some more stuff
}
v.startAnimation(animSlideOut);
}
は、これは、同様に動作しますが、私はその単一のリストエントリをもう一度クリックすると、今の問題は、私は再びすべての項目を表示し、リストを再投入します。
私は最初からコードを使うことができると思っていましたが(最初のスニペット)、アプリを起動するときにはうまくいきますが、今回は...そうではありません。アニメーションは起こらない。理由は、私のListViewでアニメートするビューはありません(前のステップからのものを除く)。アダプタはすべて18を保持している間、私はすでに、
_lvList.getChildCount();
静止画に戻り1つのビューとして、...)notifyDataSetChanged(と呼ばれる、新しいそれを埋める、それをクリアするためには使用を試していない代わりに、新しいTableAdapterの作成の
エントリ。 私もアニメーションの前にその子ビューを生成するために、リストビューを強制的に
requestLayout();
forceLayout();
invalidate();
invalidateViews();
を試してみましたが、それは働いていません。ですから、ListViewはただちに表示されます。レイアウト・アニメーションを呼び出した直後です。
概要:私のリストビューには、レイアウトアニメーションの開始前に子ビューが含まれていません。どうすればそれらを強制的に生成できますか?事前に
Thxを:)
この問題は解決しましたか? – dexxtr
@dexxtr申し訳ありませんが、それはずっと前ですが、最終的には、コードが期待通りに動作しなかったため、別のアニメーションで解決しました... –
私はすでに修正済みです:)問題は別の画面への参照を持っている間違ったコンテキストにあった – dexxtr