2017-01-24 8 views
1

コールバック/リスナーを使用してListViewProgressBarを更新するのに役立つ人はいますか?リストビューデータ更新時の行

  • 正しい方向に向ける?
  • 私は何をしようとしているか教えてくれますか?

私はGoogleに何をしようとしているのか分かりません。私は「ProgressBarを使ってチュートリアルをダウンロード」をたくさん見てきましたが、私が取り組んでいるものに合わないものです。 ListViewのシンプルなProgressBarを更新することができるので、リストビューと非同期タスクが同じクラスにある場合、私は不満です。しかし私の実装では、ListViewは単にデータのオブザーバーに過ぎず、それは見なければなりませんか?通知されますか?タイマーを設定し、を常にnotifiyDataSetChanged()でリフレッシュしますか?

私のデータは、別のクラスで更新されています。私のListViewアクティビティはそのデータのみを参照し、進行状況を表示する必要があります。

ListViewは活動がロードされたときのデータのとれ状態を示すで素晴らしい作品。しかし、ProgressBarを更新し続けることはできません。

データクラスは、自分のオブジェクトのprogressプロパティを更新するのに効果的です。

これで、データが変更されたときに各行を更新するだけで済みます。

表示中のデータが変更されたときに各ListView行に通知を受け取るにはどうすればよいですか?

答えて

1

あなたの場合はLocalBroadcastReceiverを使用することをおすすめします。データの状態が別のクラスから更新されると、ListViewを保持しているActivityにブロードキャストイベントを送信し、ブロードキャストを受信したときにListViewを更新することを検討することができます。

ListViewを保持しているActivityまたはFragmentにブロードキャスト受信機を実装するには、このような処理が必要です。

@Override 
public void onCreate(Bundle savedInstanceState) { 

    ... 

    // Register to receive messages. 
    // We are registering an observer (mMessageReceiver) to receive Intents 
    // with actions named "custom-event-name". 
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
     new IntentFilter("custom-event-name")); 
} 

// Our handler for received Intents. This will be called whenever an Intent 
// with an action named "custom-event-name" is broadcasted. 
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    // Get extra data included in the Intent 
    String message = intent.getStringExtra("message"); 
    // Do something with message 
    yourAdapter.notifyDataSetChanged(); // notify the adapter here 
    } 
}; 

@Override 
protected void onDestroy() { 
    // Unregister since the activity is about to be closed. 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
    super.onDestroy(); 
} 

onReceive機能は、送信された放送のコールバックを取得すると、それに渡された現在の状態でListViewを更新します。この例ではメッセージを送信しています。カスタムデータを渡すことを検討することもできます。

ListViewに示されているデータの状態を別のクラスから送信するには、ActivityまたはFragmentに登録されている受信者にブロードキャストを送信する必要があります。

// Send an Intent with an action named "custom-event-name". The Intent sent should 
// be received by the ReceiverActivity. 
private void sendMessage() { 
    Log.d("sender", "Broadcasting message"); 
    Intent intent = new Intent("custom-event-name"); 
    // You can also include some extra data. 
    intent.putExtra("message", "This is my message!"); 
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
} 

応じListViewを更新するために、あなたのデータの任意の更新にsendMessage関数を呼び出します。

+0

よく整えた –

+0

ありがとう!私はこれを実装するために働くでしょう! –

+0

それだけです!どうもありがとうございます!!! –

関連する問題