在数据更改时更新ListView行

时间:2017-01-24 15:22:37

标签: java android listview

有人可以帮助我使用回调/监听器更新ProgressBar中的ListView吗?

  • 指出我正确的方向?
  • 告诉我我要做的是什么?

我对Google的教程不太了解。我已经看过很多"使用ProgressBar下载教程"但他们不适合我正在做的事情。我很沮丧,因为能够更新ProgressBar中的简单ListView会很简单,如果列表视图和异步任务在同一个类中。但在我的实现中,ListView仅仅是数据的观察者,它应该注意吗?收到通知?设置一个计时器,然后不断刷新ListView通过notifiyDataSetChanged()

我的数据在不同的课程中更新。我的ListView活动仅查看该数据,并应显示进度。

加载Activity时,ListView非常适合显示数据的 CURRRENT 状态。但未能继续更新ProgressBar

数据类非常适合更新我的对象的进度属性。

现在我只需要在数据发生变化时更新每一行。

当显示的数据发生变化时,如何让每个ListView行得到通知?

1 个答案:

答案 0 :(得分:1)

您可以考虑在案例中使用LocalBroadcastReceiver。当从另一个类更新数据的状态时,您可以考虑向持有Activity的{​​{1}}发送广播事件,并在收到广播时更新ListView

要在ListViewActivity中保留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中显示的数据的状态,您需要将广播发送到在ListViewActivity中注册的接收者。

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