将布局参数设置为ImageView时出错

时间:2011-09-30 13:53:06

标签: android android-layout android-linearlayout android-imageview

我在尝试将layoutparams设置为以编程方式创建的ImageView时遇到问题:

imageView.setLayoutParams(new LinearLayout.LayoutParams(gallerySize.x, gallerySize.y));

imageView位于LinearLayout内,我认为应该可行,但我收到此错误:

09-30 10:33:24.450: ERROR/AndroidRuntime(5418): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams

也许,这个imageView Activity被配置为使用不同的布局进行纵向和横向视图这一事实(我在layout-land文件夹中使用了不同的xml布局副本)。当它处于纵向视图时,不会执行有问题的代码行,而是执行以下行:

imageView.setLayoutParams(new Gallery.LayoutParams(gallerySize.x, gallerySize.y));

我试图保持这条线不变,但后来我得到了错误:

09-30 10:49:47.450: ERROR/AndroidRuntime(5760): java.lang.ClassCastException: android.widget.Gallery$LayoutParams

纵向和横向布局的主要区别在于,肖像使用垂直方向的LinearLayout并使用Gallery窗口小部件(使用该图像视图),而有问题的景观使用水平方向和ListView代替Gallery

我很丢失,任何提示都会受到赞赏。


EDITED

imageView在此类中实现:

    public class ImageAdapter extends BaseAdapter {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView = new ImageView(mContext);

            Bitmap temp = BitmapFactory.decodeFile(appFolder+"/"+imagesPath[position]);
            //productImages[position] = temp;

            imageView.setImageBitmap(temp);

            if(landscape)
                imageView.setLayoutParams(new LinearLayout.LayoutParams(gallerySize.x, gallerySize.y));
            else
                imageView.setLayoutParams(new Gallery.LayoutParams(gallerySize.x, gallerySize.y));


            imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
            imageView.setBackgroundResource(mGalleryItemBackground);

            return imageView;
        }
    }

此处使用ImageAdapter实例:

    public onCreate(...) {
        ...
        if(!landscape) {
        Gallery gallery = (Gallery) findViewById(R.infoproduto.gallery);
        gallery.setAdapter(new ImageAdapter(this));
        gallery.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView parent, View v, int position, long id) {
                    setSelectedImage(position);
                }
            }); 
        }
        else {
        ListView galleryLView = (ListView) findViewById(R.infoproduto.galleryLView);
        galleryLView.setAdapter(new ImageAdapter(this));
        galleryLView.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView parent, View v, int position, long id) {
                    setSelectedImage(position);
                }
            });
        }
    }

1 个答案:

答案 0 :(得分:1)

好吧,我想出了解决方案,它是如此明显!

ImageView在ImageAdapter中使用,此ImageAdapter在ListView实例中设置为适配器:

    ListView galleryLView = (ListView) findViewById(R.infoproduto.galleryLView);
    galleryLView.setAdapter(new ImageAdapter(this));

所以相反使用LinearLayout.LayoutParams(这是我的xml文件中唯一的布局),我使用ListView.LayoutParams并且它完美运行!