如何检测当前是否显示特定活动?

时间:2013-11-25 18:56:13

标签: android android-listview android-asynctask android-activity

我有与数据库关联的标准ListView活动:

dbHelper = new DbAdapter(this);
dbHelper.open();
recordsCursor = dbHelper.fetchAllRecords();
startManagingCursor(recordsCursor);

String[] from = new String[]{DbAdapter.KEY_1, DbAdapter.KEY_2};
int[] to = new int[]{R.id.text1, R.id.background};

adapter = new SimpleCursorAdapter(this, R.layout.row, recordsCursor, from, to);

用户可以选择通过菜单项手动更新列表。它运行任务以从服务器获取更新日期:

new SyncTask(getApplicationContext(), true).execute();

(第二个参数表示这是手动启动同步还是自动)

同步完成后(onPostExecute),如果仍然显示相同的活动,我想更新列表(fetchAllRecordschangeCursor等)。如果是这种情况我怎么能理解?

2 个答案:

答案 0 :(得分:1)

fragments不同,您没有任何方法可以检查活动生命周期,但添加类似内容很简单:

private boolean mResumed;

@Override
protected void onResume() {
    mResumed = true;
}

@Override
protected void onPause() {
    mResumed = false;
}

private void isResumed() {
    return mResumed;
}

当后台任务完成时,只需调用isResumed(),以查看活动是否仍在屏幕上可见。

答案 1 :(得分:0)

好吧,我不深入了解主要问题。

你之前说过:

“如果用户刚刚在菜单项中选择了一个项目来刷新列表,然后等待它完成,该怎么办?”

如果发生这种情况,您可以像在“onPostExecute”之前所说的那样在任务结束时更新列表视图(没有问题)。

但在另一种情况下,您可以使用返回所需标记的方法来检索活动的状态,或者如果使用片段,则可以使用getActivity()来执行某些操作。在活动显示时,活动会执行'Resumen'步骤,就像Philio之前解释的那样。

结论,您可以在onResumen中自动更新listview,并且可以在syncTask中的onPostExecute中手动更新它。这种方法将在自动或手动模式下调用无关紧要。