gpt4 book ai didi

java - 在数据更改时更新 ListView 行

转载 作者:行者123 更新时间:2023-11-30 00:45:45 25 4
gpt4 key购买 nike

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

  • 给我指出正确的方向?
  • 告诉我我正在尝试做的事情叫什么?

我不太了解我要对 Google 教程做什么。我看过很多“使用 ProgressBar 下载教程”,但它们不适合我正在做的事情。我很沮丧,因为能够在 ListView 中更新一个简单的 ProgressBar 会很简单,如果 ListView 和异步任务在同一个类中。但在我的实现中,ListView 只是数据的观察者,它应该观察吗?被通知?设置一个计时器并通过 notifiyDataSetChanged() 不断刷新 ListView?

我的数据在不同的类中更新。我的 ListView Activity 仅查看该数据并应显示进度。

ListView 在加载 Activity 时显示数据的 CURRENT 状态方面表现出色。但是无法继续更新 ProgressBar

数据类在更新我的对象的进度属性方面表现出色。

现在我只需要在数据更改时更新每一行。

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

最佳答案

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

要在包含 ListViewActivityFragment 中实现广播接收器,您需要执行以下操作。

@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 函数以相应地更新 ListView

关于java - 在数据更改时更新 ListView 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41831873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com