7

データベースからの情報を表示するカスタム アダプターを備えた ListView があります。アプリを起動すると、データベースからデータが読み取られ、アダプターに渡され、ListView にアタッチされます。LayoutAnimationController が 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);
}

これも同様に機能しますが、問題は、その 1 つのリスト エントリをもう一度クリックすると、リストが再作成され、すべての項目が再び表示されることです。

アプリの起動時に問題なく動作するので、最初(最初のスニペット)からコードを使用できると思っていましたが、今回は…そうではありません。アニメーションは発生しません。その理由は、ListView でアニメーション化するビューがないためです (前のステップのビューを除く)。

新しい Tableadapter を作成する代わりに、私はすでにそれをクリアしようとしましたが、notifyDataSetChanged() と呼ばれる新しいものを埋めようとしました...

_lvList.getChildCount();

stills は 1 つのビューを返しますが、アダプターは 18 のエントリすべてを保持します。私もやってみました

requestLayout();
forceLayout();
invalidate();
invalidateViews();

アニメーションの前にListViewに強制的に子ビューを生成させますが、機能していません。そのため、レイアウト アニメーションを呼び出した後、ListView が即座に表示されます。

概要 : 私の ListView には、レイアウト アニメーションの開始前に子ビューが含まれていません。強制的に生成するにはどうすればよいですか?

事前にThx :)

4

1 に答える 1

1

うーん...これはもうしましたか?(下)

カスタム アダプタで、メソッドをオーバーライドします。

@Override
public View getView(int position, View convertView, ViewGroup parent){
    //the position of the item, the convertView is the view layout of what that row is

}

リストビューの更新方法を変更します。この getView メソッドは、ビューを更新するために Android によって時々呼び出されます (手動で呼び出す必要はありません)。

また、電話するだけでいいと思います

listView.notifiyDataSetChanged()リストをlistView.invalidate()再作成した後、更新を強制するには

ここでリストビューの詳細を読むことができます:

http://www.vogella.com/articles/AndroidListView/article.html

http://developer.android.com/guide/topics/ui/layout/listview.html

于 2012-11-13T17:14:25.833 に答える