Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当选中此选项更改其他视图时,滚动时Coverflow会自动重新居中_Android_Gallery_Coverflow_Baseadapter_Android Cursoradapter - Fatal编程技术网

Android 当选中此选项更改其他视图时,滚动时Coverflow会自动重新居中

Android 当选中此选项更改其他视图时,滚动时Coverflow会自动重新居中,android,gallery,coverflow,baseadapter,android-cursoradapter,Android,Gallery,Coverflow,Baseadapter,Android Cursoradapter,亲爱的社区: 我有一个非常棘手的问题。首先,我建立了一个“选择者”活动,它只不过是左侧的一个车轮视图,中间是一个Coverflow,下面是另一个(较小的)Coverflow。顺便说一句,CoverFlow是一个逻辑被覆盖的库 中央盖流使用底座适配器。我创建了一些列表集,每次coverflow获得新内容时,我都会使用其中一个列表创建BaseAdapter的新实例。在我的例子中,这是在选择下部CoverFlow中的项目时完成的。所以我实现了一个OnItemSelectedListener,以检查何时

亲爱的社区:

我有一个非常棘手的问题。首先,我建立了一个“选择者”活动,它只不过是左侧的一个车轮视图,中间是一个Coverflow,下面是另一个(较小的)Coverflow。顺便说一句,CoverFlow是一个逻辑被覆盖的库

中央盖流使用底座适配器。我创建了一些列表集,每次coverflow获得新内容时,我都会使用其中一个列表创建BaseAdapter的新实例。在我的例子中,这是在选择下部CoverFlow中的项目时完成的。所以我实现了一个OnItemSelectedListener,以检查何时发生这种情况。滚动此coverflow会导致视图始终“notifyDataSetChanged”,并在某些情况下更改适配器。现在这就像一个符咒

由于此选择器(中心coverflow)中有很多对象,我决定继续使用游标适配器来提高性能。现在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);

    }
}
private-OnItemSelectedListener itemSelListener=new-OnItemSelectedListener(){
@凌驾
已选择公共视图(适配器视图arg0、视图arg1、内部arg2、,
长arg3){
//如果(!通过单击选择){
switchModelType(arg1.getId());
//          }
}
私有void switchModelType(int-id){
int oldMode=模式;
模式=id;
对于(int i=0;i

在这部分代码中的任何地方都没有触及下CoverFlow,在类中的任何地方也没有触及下CoverFlow。

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

问题是,我以编程方式创建了下部coverflow,从而以编程方式将两者的高度设置为layout_height。每次我更改coverflow的适配器时,它都会调用其测量方法,从而也会调用下部coverflow的测量方法(因为它们由layout_height链接)。在XML中设置此选项,将布局和添加到超线性布局中,即可解决此问题

感谢上帝