GridView中适配器中的元素数量错误

时间:2013-07-15 13:00:09

标签: java android baseadapter

我创建了自己的扩展BaseAdapter的适配器,我将它用于GridView。我想获取元素的数量并将其放入TextView。我在我的适配器中做到了:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View gridView;

        if(convertView == null){
            gridView = new View(context);

            gridView = inflater.inflate(R.layout.grid_element, null);

            ImageView logo = (ImageView) gridView.findViewById(R.id.grid_logo);


            TextView tv = (TextView) gridView.findViewById(R.id.grid_textView1);
            tv.setText(level+position);
        }
        else
            gridView = convertView;

        return gridView;
    }

看起来很好,直到我在启动时获得不在屏幕中的元素: enter image description here

这个职位就像重置一样。 我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

当convertView不为null时,您没有正确设置TextView。试试这个:

if (convertView == null) {
    gridView = inflater.inflate(R.layout.grid_element, null);
} else {
    gridView = convertView;
}

ImageView logo = (ImageView) gridView.findViewById(R.id.grid_logo);

TextView tv = (TextView) gridView.findViewById(R.id.grid_textView1);
tv.setText(level + position);

答案 1 :(得分:1)

可能会帮助新的访客。

你必须知道两件事:

  1. 您需要检查convertView是否为空,以便知道列表中的行是否尚未创建(convertView = null)或是否正由适配器回收({{ 1}})。这称为Recycling进程。

  2. 另一个重要的事情是View Holder Pattern。在convertView != null方法的每一行上调用findViewById()对于列表填充来说很重要,并且会降低滚动性能。为避免这种情况,请创建一个静态类,其中一些视图作为类字段。如果正在创建视图(getView()),请使用findViewById(),并在回收时使用convertView == null方法取回

  3. `

    getTag()