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