簡體   English   中英

將布局參數設置為ImageView時出錯

[英]Error setting layout params to 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小部件(使用該imageView),而有問題的橫向則使用水平方向和ListView而不是Gallery

我在這里迷路了,任何提示將不勝感激。


已編輯

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);
                }
            });
        }
    }

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

ImageView在ImageAdapter內部使用,並且此ImageAdapter在ListView實例中設置為適配器:

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

因此,我不是使用LinearLayout.LayoutParams(這是我的xml文件中唯一的布局),而是使用ListView.LayoutParams,它可以完美運行!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM