我已经基于this tutorial实现了一个GridView。除非打开搜索对话框或旋转屏幕然后滚动,否则它的效果很好。
当出现搜索对话框和虚拟键盘时,我的每个网格项的可绘制项都会移动。我可以点击它们,他们按照我的预期行事,除了抽奖是错误的。
当我进入横向模式并滚动时,会出现同样的问题。如果我向下滚动,向上滚动,向下滚动,则拖车会被拖拽。
为了更好地说明,假设我有三个对象,每个对象都有一个图像。
当发生 shift 时,我最终得到:
问题在两个原因(搜索对话框和屏幕旋转n'滚动)之间不一致,但每个原因本身都是一致的。反复滚动会显示模式,搜索对话框也会出现。我怎样才能阻止这种情况发生?
答案 0 :(得分:6)
您链接的源代码存在缺陷。
您可以在getView()
中填充布局时设置文本和图像,如该代码所示。您需要每次都设置文本和图像,无论是新增的布局还是通过convertView
回收的布局。
关键在于“回收”一词。如果convertView
不是null
,则表示您之前充气的某些现有View
Android要求您根据提供的位置重新填充新数据。您链接的代码会忽略该部分。
Here is an excerpt来自我的一本书,其中涵盖了适配器中的回收概念。虽然摘录侧重于ListView
,但GridView
的技术相同。
答案 1 :(得分:0)
我有同样的问题,但情况不同。我在searchview下面有一个网格视图。当我按搜索视图输入内容时,网格视图变得混乱了。原来我的网格视图适配器中缺少以下“其他”部分
if(view==null){
myview = new View(context);
myview = layoutInflater.inflate(R.layout.single_cat_item,null);
ImageView imageView = (ImageView) myview.findViewById(R.id.catImage);
TextView textView = (TextView) myview.findViewById(R.id.catText);
imageView.setImageResource(images[i]);
textView.setText(values[i]);
}else{
myview =(View) view;
}