我有与数据库关联的标准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
等)。如果是这种情况我怎么能理解?
答案 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中手动更新它。这种方法将在自动或手动模式下调用无关紧要。