有人可以帮助我使用回调/监听器更新ProgressBar
中的ListView
吗?
我对Google的教程不太了解。我已经看过很多"使用ProgressBar下载教程"但他们不适合我正在做的事情。我很沮丧,因为能够更新ProgressBar
中的简单ListView
会很简单,如果列表视图和异步任务在同一个类中。但在我的实现中,ListView
仅仅是数据的观察者,它应该注意吗?收到通知?设置一个计时器,然后不断刷新ListView
通过notifiyDataSetChanged()
?
我的数据在不同的课程中更新。我的ListView
活动仅查看该数据,并应显示进度。
加载Activity时,ListView
非常适合显示数据的 CURRRENT 状态。但未能继续更新ProgressBar
。
数据类非常适合更新我的对象的进度属性。
现在我只需要在数据发生变化时更新每一行。
当显示的数据发生变化时,如何让每个ListView
行得到通知?
答案 0 :(得分:1)
您可以考虑在案例中使用LocalBroadcastReceiver
。当从另一个类更新数据的状态时,您可以考虑向持有Activity
的{{1}}发送广播事件,并在收到广播时更新ListView
。
要在ListView
或Activity
中保留Fragment
来实现广播接收器,您需要执行此类操作。
ListView
@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);
}
函数以相应地更新sendMessage
。