奇怪的网格视图行为

时间:2015-08-18 16:26:39

标签: c# android gridview xamarin

我试图在标题中更清楚......但是......这只是奇怪......

1st:设置

与Xamarin合作。我有2个网格视图。应用程序打开时,将创建并填充第一个。单击第一个网格视图中的项目时,将创建并填充第二个

两个gridviews都是使用相同的构造函数和相同的适配器类创建的。

第二名:问题

我注意到的第一件事是,当第二个gridview被创建时,第一个gridview的第一个项目将消失。无论我在哪里点击。两个网格都可见,应用程序如下所示:

enter image description here

很容易让它再次出现,我只需要在第一个细胞消失且细胞永不消失的行为中添加adapter.NotifyDatasetChanged()。太棒了......尽管它是一个补丁,而不是一个解决方案,而且当有很多网格创建时,这个补丁还不够好。此外,我还注意到,如果我向下滚动并向上滚动,单元格也会重新出现(可能是因为视图在返回可见范围时被迫刷新初始视图)。我认为我的问题是我的自定义适配器的实现。因此,我花了相当多的时间来查看我的GetView实现。然后我注意到了一些奇怪的事情:如果我向下滚动然后备份视图刷新,就像我之前说的那样,但是,如果我只滚动一点,就像在不再可见的单元格的中间,然后再向上,这发生的情况:

enter image description here

是的......它有点不断向上滚动。问题仍然是我的适配器实现吗?

我的GetView很简单,我有一个带视图的单独列表,GetView在那里获取所需的视图:

        public override View GetView (int position, View convertView, ViewGroup parent)
        {
            RelativeLayout temp;
            if (convertView != null) {
                temp = (RelativeLayout)convertView;
            } else {
                temp = new CustomGestureListener (Android.App.Application.Context);
            }
            temp.RemoveAllViews ();
            RelativeLayout.LayoutParams cellLP = null;
            if (data [position] != null) {
                RelativeLayout referenceView = (RelativeLayout)data [position].NativeObj;
                if(referenceView != null && referenceView.Handle != IntPtr.Zero){
                    View refParent = (View)referenceView.Parent;
                    if (refParent != null)
                        ((ViewGroup)refParent).RemoveView (referenceView);

                    cellLP = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.MatchParent, referenceView.LayoutParameters.Height);//(RelativeLayout.LayoutParams)referenceView.LayoutParameters;
                    temp.AddView (referenceView, cellLP);
                }
            }

            return (View)temp;
        }

我一直在listview中使用相同的适配器而没有问题。即使我使用同一个适配器用Listview替换第一个网格,我重新创建了这个创建gridview的行为,但ListView中不会发生这个问题

0 个答案:

没有答案