滚动屏幕时,GridView元素会动态更改其位置

时间:2011-05-19 08:19:27

标签: android

我有一个gridview布局,所有项目都插入非常精细,

现在,如果我在大屏幕上查看,那么所有完成的工作都很好,因为不需要滚动

但如果我在小屏幕上查看,则项目会动态更改其位置

bereif示例如下: -

就像我有28个项目并在网格视图7 * 4中排列,现在如果在第一个屏幕中显示多达20个项目,现在剩下的8个在我向下滚动屏幕时显示,但是现在有些元素是第一个或者第二行也是最后一行。

代码在这里

public class ImageAdapter extends BaseAdapter
    {
        Context mContext;
        //public static final int ACTIVITY_CREATE = 10;
        public ImageAdapter(Context c)
        {
            mContext = c;
        }
        @Override
        public int getCount() 
        {
            // TODO Auto-generated method stub
            return providers.length;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) 
        {
            // TODO Auto-generated method stub
            View v;
            if(convertView==null)
            {
                LayoutInflater li = getLayoutInflater();
                v = li.inflate(R.layout.icontext, null);
                TextView tv = (TextView)v.findViewById(R.id.icon_text);
                tv.setText(providers[position]);
                ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
            iv.setImageResource(R.drawable.icon);
            }
            else
            {
                v = convertView;
            }
            return v;
        }

2 个答案:

答案 0 :(得分:54)

您应该像这样更改getView方法。

    public View getView(int position, View convertView, ViewGroup parent){
        // TODO Auto-generated method stub
        View v;
        if(convertView==null)
        {
            LayoutInflater li = getLayoutInflater();
            v = li.inflate(R.layout.icontext, null);
        }else{
            v = convertView;
        }
        TextView tv = (TextView)v.findViewById(R.id.icon_text);
        tv.setText(providers[position]);
        ImageView iv = (ImageView)v.findViewById(R.id.icon_image);
        iv.setImageResource(R.drawable.icon);

        return v;
    }

您的问题是,当您使用convertView时,它会将旧数据存储在第一个记录中。转换视图用于避免资源的布局膨胀,这会花费您的时间和内存。您应该使用旧的膨胀视图,但设置新数据。

答案 1 :(得分:2)

我刚刚删除了

if(convertView==null)

它有效