亲爱的Stackoverflow社区,
我有一个非常奇怪的问题。首先,我构建了一种“选择器”活动,它只不过是左侧的WheelView,中间的Coverflow和下方的另一个(较小的)覆盖流。顺便说一句。 CoverFlow是一个覆盖了一些逻辑的图库。
中心封面流使用BaseAdapter。我已经创建了一些列表,每次我的coverflow获取新内容时,我会使用其中一个列表创建一个新的BaseAdapter实例。在我的情况下,当在下面的CoverFlow中选择一个项目时就完成了。所以我实现了OnItemSelectedListener,以检查何时发生。滚动此Coverflow会导致视图始终为“notifyDataSetChanged”,并在某些情况下更改适配器。现在这就像一个魅力。
由于我在此选择器中有很多对象(中心封面流),我决定继续使用CursorAdapter来提高性能。现在CursorAdapter似乎没有notifyDataSetChanged()方法,所以我复制了与BaseAdapter相同的代码逻辑并在我的中使用了它。较低的Coverflow仍使用相同的适配器(在本例中为ListAdapter,实现SpinnerAdapter)。现在 - 当执行完全相同的逻辑时,下覆盖流在中心CoverFlowAdapter上的每次notifyDataSetChanged()调用之后重新定位。我真的不明白。我不会在这里发布整个逻辑,因为这将是大约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,也不会在课堂的任何地方触及。
答案 0 :(得分:0)
没关系..虽然我搜索了这个错误好几天,但我现在得到了解决方案。
问题是,我以编程方式创建了下覆盖流,因此以编程方式设置layout_height的高度。每当我更改了Coverflow的适配器时,它都会调用它的测量方法,因此也调用下覆盖流的测量方法(因为它们通过layout_height链接)。在XML中设置它,将layout_sum添加到超线性布局可以解决问题。
感谢上帝..