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

Android 当滚动屏幕时,GridView元素会动态更改其位置,android,Android,我有一个gridview布局,所有项目都插入得非常精细, 现在,若我在大屏幕上检查,那个么所有的工作都完成了,因为不需要滚动 但如果我在小屏幕上查看,则项目会动态更改其位置 如果示例如下所示:- 就像我有28个项目,并以7*4的网格视图排列,现在如果第一个屏幕中显示多达20个项目,那么在我向下滚动屏幕时会显示剩余的8个项目,但现在第一行或第二行的一些元素也会放在最后一行。 代码在这里 public class ImageAdapter extends BaseAdapter {

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

现在,若我在大屏幕上检查,那个么所有的工作都完成了,因为不需要滚动

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

如果示例如下所示:-

就像我有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;
        }

您应该像这样更改
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
时,它存储来自第一条记录的旧数据。“转换视图”用于避免资源的布局膨胀,这会耗费您的时间和内存。您应该使用旧的充气视图,但设置新数据。

我刚刚删除了

if(convertView==null)

它可以工作

可以发布任何代码吗?例如,你的适配器代码?我粘贴了ImageAdapter代码,请看我粘贴的代码,现在你能给我建议吗?嗨,我也有同样的问题。但是我用复选框代替了文本视图。当视图中有任何变化时,选中的复选框对我来说都是变化的,但是滚动时,它不能平稳地工作……那太好了。谢谢。如何在这方面实现平滑滚动?我已经更新了我的代码,但它不工作,任何帮助,请我急需它:是的,这修复了问题。但是性能变得非常糟糕。这解决了我的问题。谢谢你,鲍里斯