好的,这就是我解决这个问题的方法,我对此很满意..
- 当用户单击列表中的项目时,会做两件事。1) 改变内容。2) 发出广播意图,说明现在正在显示特定 ID 的项目。
- 然后每个 ListFragment 为上述意图实现一个 BroadcastReceiver。此 BroadcastReceiver 在 onPause/onResume 片段方法中注册和取消注册。
- BroadcastRecievers 运行一个方法来检查 ListView 中显示的当前可见项。这种方法的逻辑是这样的......
.
private void setVisibleItemActivated(Long id)
{
for (int i = getListView().getFirstVisiblePosition(); i <= getListView().getLastVisiblePosition(); i++)
{
Cursor cursor = (Cursor) getListView().getItemAtPosition(i);
Long gameId = cursor.getLong(cursor.getColumnIndex("_id"));
View view = getListView().getChildAt(i);
if (view.isActivated())
{
if (gameId != id)
view.setActivated(false);
}
else
{
if (gameId == id)
view.setActivated(true);
}
}
}
...因此它会检查该 ID 当前是否在该列表中可见。
- 但是,如果项目不可见并且仍在列表中,则列表适配器 bindView() 方法会在项目变得可见时初始化项目的视图,从而设置视图的激活状态。