C# 奇怪的gridview行为

C# 奇怪的gridview行为,c#,android,gridview,xamarin,C#,Android,Gridview,Xamarin,我试图在标题上更清楚。。。但是这太奇怪了 第一:设置 与Xamarin合作。我有两个网格视图。第一个是在应用程序打开时创建和填充的。单击第一个网格视图中的项目时,将创建并填充第二个网格视图 两个GridView都是使用相同的构造函数和相同的适配器类创建的 第二:问题 我注意到的第一件事是,当创建第二个gridview时,第一个gridview的第一项将消失。不管我点击哪里。两个网格都可见时,应用程序如下所示: 很容易让它重新出现,我只需要添加一个适配器。NotifyDatasetChanged

我试图在标题上更清楚。。。但是这太奇怪了

第一:设置

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

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

第二:问题

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

很容易让它重新出现,我只需要添加一个
适配器。NotifyDatasetChanged()
,使第一个单元格消失,而单元格永远不会消失。伟大的虽然这是一个补丁,不是一个解决方案,但当大量网格创建进行时,这个补丁还不够好。此外,我还注意到,如果向下滚动并向上滚动,单元格也会重新出现(可能是因为视图在返回可见范围时被迫刷新初始视图)。我想我的问题是自定义适配器的实现。因此,我花了相当多的时间研究我的GetView实现。然后我注意到了一个更奇怪的现象:如果我向下滚动然后备份视图刷新,就像我之前所说的,但是,如果我只滚动一点,比如在单元格的一半不再可见,然后备份,就会发生这种情况:

嗯。。。它一直在向上滚动。这个问题仍然是我的适配器实现吗

我的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中也不会出现问题