活动不刷新View

时间:2013-04-26 12:14:54

标签: android database listview view refresh

过去一周我遇到了这个问题,但未能找到解决方案。还可以说,确切的问题也是未知的。所以我只是要发布正在发生的事情。

我有一个应用程序,允许下载和上传照片到Facebook。我创建了一个单独的活动(让我们称之为Tracker),它允许用户通过从我创建的数据库中读取值来管理这些下载和上传。它显示了上传/下载的图片的进度和数量。下载和上传在服务中执行,该服务还将值输入数据库。

问题如下:

当我开始下载并进入追踪器时,它会绑定到下载/上传服务。服务在数据库中输入更新的值,并向Tracker活动发送消息以显示更新的值。跟踪器从数据库中读取更新的值并显示它。但是,如果我从Tracker退出并在服务运行时再次输入它,则它不会显示更新的值。对于Tracker活动的所有后续重新启动,都会发生这种情况,直到新的下载/上载开始。然后它也是第一次成功显示值,但不是从第二次重新启动开始。

在检查日志时,我发现Tracker在重新启动时绑定到服务并成功从数据库中读取值。该值很容易打印在日志中。但是,如果我尝试使用listview或textview在活动视图中打印该值,则不会显示。视图只刷新一次,而不是之后。

我已经找到了可能的原因,但我什么也没想出来。我必须尝试过大约50种解决方案,但由于我甚至不知道究竟是什么导致了这个问题,所以没有任何效果。

请帮助,这个错误是推迟我的应用启动。

代码:

Tracker onResume:

@Override
protected void onResume() {
  // TODO Auto-generated method stub
  super.onResume();
  if (isDownloadRunning() && !downloadBound) {
      Intent dCommLink = new Intent(this, DownloadService.class);
      dCommLink.setAction("COMM_LINK");
      dCommLink.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
      Messenger msngr = new Messenger(handler);
      dCommLink.putExtra("MESSENGER", msngr);
      bindService(dCommLink, dConn, Context.BIND_AUTO_CREATE));
      downloadBound = true;
  }
  update();
}

update()包含:

private void update() {
  Cursor trackCursor = trackerDb.getValues(null);
  if(trackCursor.moveToFirst())
      txt.setText(trackCursor.getString(
      trackCursor.getColumnIndex(TrackerDatabase.KEY_CCOUNT))
      + "/" + trackCursor.getString(trackCursor.getColumnIndex(
      TrackerDatabase.KEY_TCOUNT)));
  else
      text.setText("");
  trackCursor.close();
}

追踪器onPause:

@Override
protected void onPause() {
  // TODO Auto-generated method stub
  super.onPause();
  trackerActive = false;
  if (downloadBound) {
      unbindService(dConn);
      downloadBound = false;
  }
}

0 个答案:

没有答案