0

我有标准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),我想更新列表(fetchAllRecords,changeCursor等),如果仍然显示相同的活动。我怎么能理解,如果是这样的话?

回答

1

不像fragments你没有任何方法来检查活动的生命周期,但它是简单的添加类似的东西:

private boolean mResumed; 

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

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

private void isResumed() { 
    return mResumed; 
} 

直接让isResumed()当你的后台任务完成后,看是否该活动仍然可以在屏幕上看到。

+0

谢谢。它不应该在'onPause'上是'false'吗?主要问题 - 如果用户只是选择菜单项来刷新列表,然后等待其完成? 'onPause'和'onResume'不会在这种情况下被调用,所以'mResumed'将不确定... –

+0

如果你有一个活动的活动/可见您的设备上,该的onResume一直叫。我已经纠正了你指出的例子中的错误。 – Philio

0

好了,我不深的主要问题理解。

你之前说:

“假设用户只需选择一个项目中的菜单项刷新列表,然后等待其完成?”

如果发生这种情况,你可以在最后更新的列表视图的任务像你之前说的“onPostExecute”(没有问题)。

但在其他情况下,你可以与我想要或返回的标志,如果你使用的片段可以getActivity()做一些事情的方法retrive活动的状态。一旦活动显示出来,活动就会像Philio之前解释的那样进行'Resumen'步骤。

结论,你可以更新onResumen列表视图自动,您可以在onPostExecute在syncTask手动更新。这种方法将被称为自动或手动模式并不重要。

相关问题