Android 使用ViewHolder时ListView类强制转换错误
我使用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(
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()
两次?