Android 使用ViewHolder时ListView类强制转换错误

Android 使用ViewHolder时ListView类强制转换错误,android,android-listview,Android,Android Listview,我使用ViewHolder为listview的每一行显示不同的背景。基本上,来自后台的图像来自服务器并加载到ImageView。然后我将我的RelativeLayout背景设置为ImageView。但是,为了实现这一点,在实现viewHolder的过程中,我在以下行中遇到了一个类强制转换异常: viewHolder=(viewHolder)rowView.setTag() 以下是我的全部实施: MyArrayAdapter.java @Override public View getView(

我使用ViewHolder为listview的每一行显示不同的背景。基本上,来自后台的图像来自服务器并加载到
ImageView
。然后我将我的
RelativeLayout
背景设置为
ImageView
。但是,为了实现这一点,在实现viewHolder的过程中,我在以下行中遇到了一个类强制转换异常:

viewHolder=(viewHolder)rowView.setTag()

以下是我的全部实施:

MyArrayAdapter.java

@Override
 public View getView(int position, View convertView, ViewGroup parent){

    ViewHolder viewHolder;
    View rowView = convertView;

    if (rowView == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        rowView = inflater.inflate(resourceId, parent, false);

        viewHolder = new ViewHolder();

        viewHolder.imageBackground = (ImageView) rowView.findViewById(R.id.imageBKG);
        viewHolder.rowlist = (RelativeLayout) rowView.findViewById(R.id.row_mallx);
        rowView.setTag(viewHolder);
    }
   else {
        viewHolder = (ViewHolder) rowView.getTag();
    }

   Mall mall = malls.get(position);

   viewHolder.rowlist.setBackground(viewHolder.imageBackground.getDrawable());
   ImageLoader.getInstance().displayImage(mall.iconWide, viewHolder.imageBackground, Utility.displayImageOptions);

   return rowView;
}

static class ViewHolder {
    public ImageView imageBackground;
    public RelativeLayout rowlist;
}
行列表.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/row_mallx"
 android:layout_width="match_parent"
 android:layout_height="155dp">

 <ImageView
    android:id="@+id/imageBKG"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:scaleType="fitXY"
    android:visibility="invisible" />

</RelativeLayout>

这里的问题是您使用的充气机

以下是初始化充气机的正确方法,我建议您在适配器的构造函数中初始化充气机,而不是在每次调用
getView(…)
时重新初始化充气机

inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

除此之外,您还应该像这样膨胀rowView:

rowView = inflater.inflate( resourceId, null );
 rowView = inflater.inflate(resourceId, parent, false);
而不是像这样初始化它:

rowView = inflater.inflate( resourceId, null );
 rowView = inflater.inflate(resourceId, parent, false);

更具体地说,错误发生在这一行:

else {
    viewHolder = (ViewHolder) rowView.getTag();
}
当您试图从rowView的标记中提取“ViewHolder”对象,而不是获取某种字符串时。


我希望这能有所帮助。

这就是你所缺少的

holder=(ViewHolder)rowView.getTag()

希望这会有所帮助:)
快乐编码。

@kalyanpvs发布。请看一看,您正在以resourceId的形式通过充气机中的R.layout.row_列表,对吗?您发布的代码似乎没有问题。发布您的总适配器时还存在其他错误code@stud91:MyArrayAdapter.java
中的行号
68
是什么?您可以发布整个适配器代码和Mall类吗?由于错误似乎是从适配器和字符串相关的位置强制转换的。为什么要调用
getTag()
两次?