在Gallery和LinearLayout之间切换 - ClassCastException

时间:2011-04-14 22:32:02

标签: android views gallery

感谢阅读!

我正在构建一个自定义图库应用,其中第一个缩略图是显示相册详细信息的专辑封面。这是流程:


getView() {
//inflate cover.xml which includes two textviews and an imageview.
    if(position == 0)
         //set some album-specific text
    else 
         //set image-specific text
}

这是实际的getView()代码:


 public View getView(int position, View convertView, ViewGroup parent) {
            //TODO: Recycle view
            convertView = mInflater.inflate(R.layout.cover, null);
            TextView tvTxt1 = (TextView)convertView.findViewById(R.cover.tvCoverText1);
            TextView tvTxt2 = (TextView)convertView.findViewById(R.cover.tvCoverText2);
            //ImageView imgView = (ImageView)convertView.findViewById(R.cover.imgImage);

            if(position == 0) {
                tvTxt1.setText("AlbumText1");
                tvTxt2.setText("AlbumText2");
                return convertView;
            }
            else {
                tvTxt1.setText("ImageText1"); 
                tvTxt2.setText("ImageText2");
                ImageView imgView = new ImageView(mContext);
                imgView.setImageResource(mImageIds[position]);
                imgView.setLayoutParams(new Gallery.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
                imgView.setScaleType(ImageView.ScaleType.FIT_XY);
                imgView.setBackgroundResource(mGalleryItemBackground);
                return imgView;
                //return convertView;
            }
        }

cover.xml包含ImageView和两个TextView

当我在convertView块中返回else时,我得到一个ClassCastException。我当然做错了什么。

我现在花了差不多两天时间:(

请帮忙!

3 个答案:

答案 0 :(得分:0)

这就是我的样子。当position == 0时,您将返回convertView,这是一个View。当您返回“else”时,您将返回ImageView。您的方法设置为返回视图。在返回之前尝试将ImageView转换为View。

尝试:return(View)imgView;

虽然从未尝试过......

答案 1 :(得分:0)

将此imageview添加到布局xml中,然后从convertview中检索它,最后返回转换视图。 这可以解决问题。 我在Gallery小部件上做了很多工作,如果有更多问题请告诉我。

答案 2 :(得分:0)

在尝试了有用的人提供的所有建议之后,我仍然无法跨越ClassCastException。

所以,作为一种解决方法 - 我将Gallery与其他想要启用/禁用的视图“叠加”。

这是一种解决方法,所以如果有人想出更好的答案 - 请在此处发布,以便我接受它。

所以这对我有用:

public View getView(int position, View convertView, ViewGroup parent) {
            //TODO: Recycle view
            //onvertView = mInflater.inflate(R.layout.cover, null);
            //ImageView imgView = (ImageView)convertView.findViewById(R.cover.imgImage);
            ImageView imgView = new ImageView(mContext);
            imgView.setImageResource(mImageIds[position]);
            imgView.setLayoutParams(new Gallery.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
            imgView.setScaleType(ImageView.ScaleType.FIT_XY);
            imgView.setBackgroundResource(mGalleryItemBackground);

            if(position == 0) {
                tvText1.setText("AlbumText1");
                tvText2.setText("AlbumText2");
                tvText3.setVisibility(View.VISIBLE);
                bottomBar.setVisibility(View.VISIBLE);
            }
            else {
                tvText1.setText("ImageText1"); 
                tvText2.setText("ImageText2");
                tvText3.setVisibility(View.GONE);
                bottomBar.setVisibility(View.GONE);
            }
            return imgView;
        }

这是我的布局main.xml文件:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_parent">
    <Gallery android:id="@+main/gallery" android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    <!-- <ImageView android:id="@+main/imgImage" -->
    <!-- android:layout_width="fill_parent" android:layout_height="fill_parent" -->
    <!-- android:adjustViewBounds="true"> -->
    <!-- </ImageView> -->
    <TextView android:id="@+main/tvText2" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:singleLine="true"
        android:maxLines="1" android:text="Text2"
        android:layout_alignParentBottom="true" />
    <TextView android:id="@+main/tvText1" android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:maxLines="2"
        android:text="Text1" android:layout_above="@main/tvText2" />
        <RelativeLayout android:id="@+main/bottomBar" android:layout_alignParentBottom="true"
            android:layout_width="fill_parent" android:layout_height="40dip"
            android:background="#A3A1A1">
            <TextView android:id="@+main/tvBottomText" android:layout_height="wrap_content" android:layout_width="fill_parent" 
                android:text="BottomBarText"/>
        </RelativeLayout>
</RelativeLayout>

Main.java中的其余代码(我修改了getView方法)几乎是here

的逐字记录

再次感谢您的帮助!