2012-04-10 2 views
-1

OK、ブロードキャストレシーバが呼び出されました。onReceive()メソッドでは、静的データを使用して新しいアダプタでギャラリーを更新します。すべてはUIスレッドで行われました。奇妙なギャラリー+ブロードキャストレシーバの動作

ただし、変更はありません。古いデータはギャラリーに残されていますが、コードをデバッグして無効にした後に更新を行うと、ああ、BTW、ビューはViewFlipperにありますが、新しいアダプタを作成する前に適切なビューに変更します。だから私は競争状態にある、これは普通ですか?そうでない場合、私は何をすべきですか?

以下は、私がonRecieve()で話していることのサンプルです。

onRecieve() { 
    mFlipper.setDisplayedChild(0); 
    mNavAdapter.addCategory(-1); 
    mGalNav.setSelection(0); 
    getCategoryProducts(-1); 
} 

void getCategoryProducts(int category) { 
    mGalProducts.setAdapter(new DealCheckInAdapter(this, 
    getCheckInProducts())); 
    mGalProducts.invalidate(); 
} 

答えて

1

invalidate()方法は、私はそれを行うだろう考えてあなたを推測しているものを行うことになっていません。

mDealCheckInAdapter.notifyDataSetChanged(); 

これは、listViewアダプタを「リフレッシュする」方法です。

+0

しかし、その新しいアダプタ私はnotifydatasetchanged() – L7ColWinters

+0

を呼び出す必要はないはずですが、これはあなたが最初にそれをやっているときにアクティビティのonCreate()内でそれを実行している場合にのみ当てはまります。それ以外の場合は、新しいアダプタでlistViewをリフレッシュしません。私のアドバイス - あなたは新しいデータがあるたびに作成しないでください - 新しいアダプタ - ただし、アダプタを表すListにデータを追加/置換し、notifyDataSetChanged()を呼び出してください。これは正しい方法です –

+0

私のギャラリーは複数のアダプタのデータを表示する必要があります。インスタンスを保持して無効化しようとしましたが、それでも正しく動作しません。私は内部的にデータを変更していないので、私はnotifyDataSetChanged()を必要としません。ギャラリーがデータ用に使用するアダプタを変更するだけです。 – L7ColWinters