我试图在标题中更清楚......但是......这只是奇怪......
1st:设置
与Xamarin合作。我有2个网格视图。应用程序打开时,将创建并填充第一个。单击第一个网格视图中的项目时,将创建并填充第二个
两个gridviews都是使用相同的构造函数和相同的适配器类创建的。
第二名:问题
我注意到的第一件事是,当第二个gridview被创建时,第一个gridview的第一个项目将消失。无论我在哪里点击。两个网格都可见,应用程序如下所示:
很容易让它再次出现,我只需要在第一个细胞消失且细胞永不消失的行为中添加adapter.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中不会发生这个问题