亲爱的 Stackoverflow 社区,
我有一个很奇怪的问题。首先,我构建了某种“选择器”活动,它只不过是左侧的 WheelView,中心的 Coverflow 和下方的另一个(较小的)coverflow。顺便提一句。CoverFlow 是一个包含一些逻辑的图库。
中心覆盖流使用 BaseAdapter。我创建了一组列表,每次我的coverflow 获取新内容时,我都会使用其中一个列表创建一个新的 BaseAdapter 实例。在我的情况下,当在下部 CoverFlow 中选择一个项目时,这是完成的。所以我实现了一个 OnItemSelectedListener,以检查何时发生。滚动此封面流会导致视图始终“notifyDataSetChanged”并在某些情况下更改适配器。现在这就像一个魅力。
因为我在这个选择器(中心覆盖流)中有很多对象,所以我决定继续使用 CursorAdapter 来提高性能。现在 CursorAdapter 似乎没有 notifyDataSetChanged() 方法,所以我复制了与 BaseAdapter 相同的代码逻辑并将其用于我的。较低的 Coverflow 仍然使用相同的适配器(在本例中为 ListAdapter,实现了 SpinnerAdapter)。现在 - 当执行完全相同的逻辑时,在中心 CoverFlowAdapter 上的每个 notifyDataSetChanged() 调用之后,下部 Coverflow 会自行居中。我真的不明白。我不会在这里发布整个逻辑,因为那将是大约 5 个类,但问题在于这一点:
private OnItemSelectedListener itemSelListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// if(!selectedByClicking){
switchModelType(arg1.getId());
// }
}
private void switchModelType(int id){
int oldMode = mode;
mode = id;
for(int i = 0; i < currentColors.length; i++){
if(currentColors[i] != null)
currentColors[i].isSelected = false;
}
if(currentColors[mode] != null)
currentColors[mode].isSelected = true;
if(coverFlow.getAdapter() != null){
((SelectionObjectCursorAdapter)
coverFlow.getAdapter()).notifyDataSetChanged();
// if(decorIsWooden)
// checkIfWoodDecorAdapter(oldMode);
}
}
在这部分代码的任何地方都没有触及到较低的 CoverFlow,也没有在类中的任何地方触及。