0

我已经制作了一个应用程序,其中我在自定义gridview中显示数据并且它运​​行良好但问题是当我滚动它并回到底部并返回顶部然后所有项目位置可以自动更改。有时它不会出现在滚动之后。这是我的代码,我认为有些问题getView

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder viewholder;
        // LayoutInflater inflator = activit.getLayoutInflater();



        if(convertView == null) { // recycled view is null so create it.
            viewholder = new ViewHolder();
        convertView = inflator.inflate(R.layout.gridviewrow, null);

        viewholder.imgvGridItem = (RelativeLayout) convertView
                .findViewById(R.id.rlGreidItemicon);
        viewholder.txtGridItemlabel = (TextView) convertView
                .findViewById(R.id.txtGridItemlabel);

            if ((lstpinfo.get(position).appname.toString()) != null) {

                viewholder.imgvGridItem.addView(getimageviewimage(lstpinfo
                        .get(position).icon));
                viewholder.txtGridItemlabel
                        .setText(lstpinfo.get(position).appname.toString());

            }
        }

        return convertView;

    }
4

1 回答 1

0

看起来转换视图逻辑没有完全实现。

当你滚动时,你会得到非空的convertView,你需要在其中设置新数据,在这种情况下你什么都不做...... +你没有在标签中设置 ViewHolder 来取回它convertView 并使用它。

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            System.out.println("getView " + position + " " + convertView);
            ViewHolder holder = null;

              if (convertView == null) {
                convertView = mInflater.inflate(R.layout.item1, null);
                holder = new ViewHolder();
                holder.textView = (TextView)convertView.findViewById(R.id.text);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder)convertView.getTag();
            }

         holder.textView.setText(mData.get(position));//<========== see it .....
            return convertView;
        }

    }
于 2012-05-31T08:35:08.723 回答