当OnItemSelected更改其他视图时,Coverflow会在滚动时自动重新定位

时间:2012-08-25 11:47:41

标签: android gallery coverflow baseadapter android-cursoradapter

亲爱的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,也不会在课堂的任何地方触及。

1 个答案:

答案 0 :(得分:0)

没关系..虽然我搜索了这个错误好几天,但我现在得到了解决方案。

问题是,我以编程方式创建了下覆盖流,因此以编程方式设置layout_height的高度。每当我更改了Coverflow的适配器时,它都会调用它的测量方法,因此也调用下覆盖流的测量方法(因为它们通过layout_height链接)。在XML中设置它,将layout_sum添加到超线性布局可以解决问题。

感谢上帝..