【问题标题】:GridView elements changes their place dynamically when scroll screenGridView 元素在滚动屏幕时动态更改其位置
【发布时间】:2014-02-12 01:07:00
【问题描述】:

我有一个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;
        }

【问题讨论】:

  • 可以发布任何代码吗?例如你的适配器代码?
  • 我贴了ImageAdapter的代码,请看
  • 嘿,我粘贴代码,现在你能建议我吗

标签: android


【解决方案1】:

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

【讨论】:

  • 嗨,我也有同样的问题。但我有复选框代替 TextView。当视图发生变化时,选中的复选框会发生变化
  • 它对我有用,但是在滚动时它工作不顺利..??
  • 太好了。谢谢。
  • 在这个如何实现平滑滚动?
  • 我已经更新了我的代码,但它不起作用,任何帮助,我非常需要它:stackoverflow.com/questions/32401630/…
【解决方案2】:

我刚刚删除了

if(convertView==null)

有效

【讨论】:

  • 是的,这解决了这个问题。但是性能变得非常糟糕。
  • 这解决了我的问题。谢谢鲍里斯
猜你喜欢
  • 2019-09-04
  • 2014-09-16
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 2015-08-22
  • 1970-01-01
相关资源
最近更新 更多