2012-11-13 33 views
7

データベースからの情報を表示するカスタムアダプタを備えた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を:)

+0

この問題は解決しましたか? – dexxtr

+0

@dexxtr申し訳ありませんが、それはずっと前ですが、最終的には、コードが期待通りに動作しなかったため、別のアニメーションで解決しました... –

+0

私はすでに修正済みです:)問題は別の画面への参照を持っている間違ったコンテキストにあった – dexxtr

答えて

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メソッドは、ビューをリフレッシュするためにたまに(あなたはそれを手動で呼び出すことはありません)

も、私はあなたが後にのみ、更新を強制するために

listView.notifiyDataSetChanged()listView.invalidate()をコールする必要があると思うのAndroidによって呼び出されますあなたはここにリストビューの詳細を読むことができ、リスト

を再増殖:

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

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

+0

はい、カスタムアダプタがあり、getView()があります。 2回目ではなく、私がアプリを起動するとすべて動作します。 notify ...()およびinvalidate()のあと、listViewのビュー数は1のままですが、アダプターには18個の項目が含まれています。 –

関連する問題