GridView项目有时会显示错误的drawable

时间:2010-05-29 20:11:24

标签: android gridview

我已经基于this tutorial实现了一个GridView。除非打开搜索对话框或旋转屏幕然后滚动,否则它的效果很好。

当出现搜索对话框和虚拟键盘时,我的每个网格项的可绘制项都会移动。我可以点击它们,他们按照我的预期行事,除了抽奖是错误的。

当我进入横向模式并滚动时,会出现同样的问题。如果我向下滚动,向上滚动,向下滚动,则拖车会被拖拽。

为了更好地说明,假设我有三个对象,每个对象都有一个图像。

  • Obj A显示Apple
  • Obj B显示香蕉
  • Obj C表示哈密瓜

当发生 shift 时,我最终得到:

  • Obj A表示哈密瓜
  • Obj B显示香蕉
  • Obj C显示Apple

问题在两个原因(搜索对话框和屏幕旋转n'滚动)之间不一致,但每个原因本身都是一致的。反复滚动会显示模式,搜索对话框也会出现。我怎样才能阻止这种情况发生?

2 个答案:

答案 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;
    }