am Anfang zeigt die Liste drei Elemente und wenn ich nach unten scrolle, erstellt es das vierte und fünfte Element, aber die sechste und nächste werden nicht erstellt. Diese Ansichten mischen die Informationen mit den ersten fünf Elementen und sie werden wiederholt, bis die Anwendung mit einer ClassCastException abstürzt. Der Grund, warum es einfach ist, jedes Element hat ein anderes Layout und einen anderen Typ, und ich habe für jeden einen anderen ViewHolder. Da die Ansichten nicht erstellt werden, sind die ViewHolder die gleichen wie die ersten fünf Elemente, und wenn die Liste einen anderen ViewHolder erreicht, stürzt sie ab (es ist Glück, dass es beim zwölften Objekt passiert). Ich muss herausfinden, warum sich die Gegenstände mit den ersten mischen.Android Listview wiederholen Sie die Elemente, beginnend mit einem bestimmten Element
Dies ist der Code des Adapters, ich denke, es ist genug.
public class PostsListAdapter extends BaseAdapter {
private FacebookPost[] posts;
private LayoutInflater mInflater;
public PostsListAdapter (Context ctx, FacebookPost[] user_posts) {
mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
posts = user_posts;
}
@Override
public int getCount() {
return posts.length;
}
@Override
public Object getItem(int position) {
return posts[position];
}
@Override
public long getItemId(int position) {
return position;
}
private abstract static class ViewHolder {
TextView fromName;
TextView arrow;
TextView toName;
TextView message;
TextView attribution;
}
private static class VideoViewHolder extends ViewHolder {
TextView name;
TextView caption;
TextView description;
ImageView icon;
}
private static class PhotoViewHolder extends ViewHolder {
}
private static class LinkViewHolder extends ViewHolder {
}
private static class StatusViewHolder extends ViewHolder {
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
Log.d("POSITION",""+position);
if(convertView == null) {
switch(posts[position].getType()) {
case FacebookPost.VIDEO:
Log.d(""+position,"VIDEO");
convertView = mInflater.inflate(R.layout.post_list_item_video, parent, false);
holder = new VideoViewHolder();
holder.fromName = (TextView)convertView.findViewById(R.id.post_list_item_video_from_name);
holder.arrow = (TextView)convertView.findViewById(R.id.post_list_item_video_arrow);
holder.toName = (TextView)convertView.findViewById(R.id.post_list_item_video_to_name);
holder.message = (TextView)convertView.findViewById(R.id.post_list_item_video_message);
((VideoViewHolder)holder).name = (TextView)convertView.findViewById(R.id.post_list_item_video_name);
((VideoViewHolder)holder).caption = (TextView)convertView.findViewById(R.id.post_list_item_video_caption);
((VideoViewHolder)holder).description = (TextView)convertView.findViewById(R.id.post_list_item_video_description);
break;
case FacebookPost.LINK:
Log.d(""+position,"LINK");
convertView = mInflater.inflate(R.layout.post_list_item_link, parent, false);
holder = new LinkViewHolder();
holder.fromName = (TextView)convertView.findViewById(R.id.post_list_item_link_from_name);
holder.arrow = (TextView)convertView.findViewById(R.id.post_list_item_link_arrow);
holder.toName = (TextView)convertView.findViewById(R.id.post_list_item_link_to_name);
holder.message = (TextView)convertView.findViewById(R.id.post_list_item_link_message);
break;
case FacebookPost.STATUS:
Log.d(""+position,"STATUS");
convertView = mInflater.inflate(R.layout.post_list_item_status, parent, false);
holder = new StatusViewHolder();
holder.fromName = (TextView)convertView.findViewById(R.id.post_list_item_status_from_name);
holder.arrow = (TextView)convertView.findViewById(R.id.post_list_item_status_arrow);
holder.toName = (TextView)convertView.findViewById(R.id.post_list_item_status_to_name);
holder.message = (TextView)convertView.findViewById(R.id.post_list_item_status_message);
break;
case FacebookPost.PHOTO:
Log.d(""+position,"PHOTO");
convertView = mInflater.inflate(R.layout.post_list_item_photo, parent, false);
holder = new PhotoViewHolder();
holder.fromName = (TextView)convertView.findViewById(R.id.post_list_item_photo_from_name);
holder.arrow = (TextView)convertView.findViewById(R.id.post_list_item_photo_arrow);
holder.toName = (TextView)convertView.findViewById(R.id.post_list_item_photo_to_name);
holder.message = (TextView)convertView.findViewById(R.id.post_list_item_photo_message);
break;
default:
holder=null;
break;
}
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
Spanned text = Html.fromHtml(posts[position].getFrom().getName());
holder.fromName.setText(text);
if(posts[position].getTo() != null)
text = Html.fromHtml(posts[position].getTo()[0].getName());
else
text=null;
if(text==null) {
holder.arrow.setVisibility(View.GONE);
holder.toName.setVisibility(View.GONE);
} else
holder.toName.setText(text);
text = Html.fromHtml(posts[position].getMessage());
holder.message.setText(text);
switch(posts[position].getType()) {
case FacebookPost.VIDEO:
text = Html.fromHtml(((FacebookVideoPost)posts[position]).getCaption());
Log.d("CAST: "+position,holder.getClass().getName());
((VideoViewHolder)holder).caption.setText(text);
text = Html.fromHtml(((FacebookVideoPost)posts[position]).getName());
((VideoViewHolder)holder).name.setText(text);
text = Html.fromHtml(((FacebookVideoPost)posts[position]).getDescription());
((VideoViewHolder)holder).description.setText(text);
break;
case FacebookPost.LINK:
break;
case FacebookPost.STATUS:
Log.d("CAST: "+position,holder.getClass().getName());
break;
case FacebookPost.PHOTO:
break;
}
return convertView;
}
}
Danke für alles.
Wie Sie viele Würfe tun, können Sie klären, wo die 'ClassCastException' genau throwed ist? – tbruyelle