【问题标题】:Images in gridview change their position while scrollinggridview 中的图像在滚动时改变它们的位置
【发布时间】:2013-08-14 12:37:12
【问题描述】:

您好,我遇到了这种问题,当滚动图像视图改变它们的位置和 他们的背景图片。我在这个网站上看到了关于这个主题的其他答案,但没有一个 帮助了我。

像这样一次: grid view scrolling issue GridView scrolling problem on Android GridView elements changes their place dynamically when scroll screen

还有很多其他的......但他们没有解决我的问题。

重要的是我不为 gridview 或 gridview 项目(imageViews)使用自定义布局。我以编程方式创建它们。这对我来说非常重要,所以如果有人知道答案,请帮助我...谢谢。

public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView==null){
        imageView = new ImageView(ctx);
    } else {
        imageView = (ImageView) convertView;
    }
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);
        imageView.setBackgroundResource(tmp[position]);
        imageView.setImageResource(blank);

    return imageView;
}

【问题讨论】:

    标签: java android gridview scroll


    【解决方案1】:

    试试这个

     class Holder {
         ImageView imageView;
     }
    
     public View getView(int position, View convertView, ViewGroup parent) {
     Holder holder;
    if(holder.imageView==null){
        holder=new Holder();
        holder.imageView = new ImageView(ctx);
        holder.imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        holder.imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        holder.imageView.setPadding(8, 8, 8, 8);
        imageView.setTag(holder);
     } else {
        holder= (Holder) imageView.getTag();
     }
    
         holder.imageView.setBackgroundResource(tmp[position]);
         holder.imageView.setImageResource(blank);
    
     return imageView;
    }
    

    【讨论】:

    • 持有人持有人;我移出 getView 因为给了我语法错误“局部变量持有者可能尚未初始化”,并且仍然无法工作,它在这一行崩溃 if(holder.imageView==null)
    【解决方案2】:

    这是一个简单的方法。适配器在滚动时回收每个视图。所以我们只需要创建在第一次之后被重新使用的那些。持有者有助于避免像 findViewById 这样昂贵的调用,并通过获取旧项目并更改其属性来重复使用这些项目。

    您需要记住的一点是,我们需要保存要显示在任何一个容器中的图像,如 array[] 或 List 并在每次返回视图之前重置,否则它将显示上次回收的视图。

    public View getView(int position, View convertView, ViewGroup parent) {
                // TODO Auto-generated method stub
    
                LayoutInflater inflater = (LayoutInflater) activity
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
                if (convertView == null) {
                    convertView = inflater.inflate(R.layout.item_layout, null);
                    holder = new ViewHolder();
                    holder.cover = (ImageView) convertView
                            .findViewById(R.id.item_cover);
                    convertView.setTag(holder);
    
                } else {
                    holder = (ViewHolder) convertView.getTag();
    
                }
    
            holder.cover.setBackgroundResource(tmp[position]);
    
            return convertView ;
        }
    
        static class ViewHolder {
            ImageView cover;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-21
      相关资源
      最近更新 更多