java - 定期更新 ListView

标签 java android listview

我目前有一个 List View,它从 ArrayList 获取数据,该数据在 MainActivity 中每隔一定时间更新一次。我想每隔一定的时间更新一次 ListView ,比如说 2 秒。问题是我在 fragment 上有这个适配器,如果我从适配器调用 notifyDataSetChanged(); ,只有在 MainActivityMainActivity 之间切换时, View 才会更新。 fragment 。我希望当我在 View 中显示 fragment 时,此 ListView 每 2 秒刷新一次。我尝试在 Adapter 类上运行 TimerTask,但出现异常:

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

我想您只能从附加了 fragment 的 MainActivity 中更新 View 。

这就是我运行计时器的方式:

public void setTimer(int seconds) {
    timer = new Timer();
    timer.schedule(new RemindTask(), seconds * 1000);
}

public class RemindTask extends TimerTask {

    //Refreshing list view
    public void run() {

        notifyDataSetChanged();
        timer.cancel();
        setTimer(2);
    }
}

在 MainActivity 上创建适配器实例并每隔一定时间调用 notifyDataSetChanged() 是否安全?

最佳答案

您可以在Fragment中创建一个广播接收器。具有特定的 Action 名称。 让我们说“refresh_data”。 然后从 MainActivity 发送此广播。 示例代码。

 public class MyFragment extends Fragment{
      private BroadcastReceiver  refreshData = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
            myAdapter.notifyDataSetChanged();
      }
    };  
@Override
    public void onResume() {
        super.onResume();
    LocalBroadcastManager.getInstance(getContext()).registerReceiver(refreshData,
    new IntentFilter("refresh_Data"));  
    }
    @Override
    public void onPause() {
        LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(refreshData);
       super.onPause();
    }
    }

每当列表更新时,在 Activity 中调用以下方法

Intent intent = new Intent("refresh_data");   
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

关于java - 定期更新 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39262762/

相关文章:

android - 如何使用光标适配器刷新适配器中的评级

android - 禁用 ListItem 的选择性

java - 如何从给定值获取平均值

java - MultiAxisChart 在 Jasper 报告中,两个轴都位于左侧

java - 在特定时间重置变量(在应用重启后也继续这样做)

java - 将上下文传递给 ListView 的自定义适配器

android toast打印奇怪的数字而不是单词

java - 根据从 Json 解析的项目更改 listView 行背景颜色

android - Fragment 中的 ListView 未显示

java - Circle JSlider - Java程序