ListView快速上下滑动就出错了

2016-09-24 04:10
package com.sjy.myproject;

import java.util.ArrayList;
import java.util.HashMap;

import com.sjy.myproject.ThemeAdapter.ViewHolder;

import android.content.Context;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CommentAdapter extends BaseAdapter implements OnClickListener {

	private LayoutInflater mInflater;// 得到一个LayoutInfalter对象用来导入布局
//	private ArrayList<Comment> mDataList = new ArrayList<Comment>();
	private Context mContext;
	private HashMap<Integer, Object> mDataHash;
	private ArrayList<Comment> commentList;
	
	public static final int TOP_THEME = 0;
	public static final int MIDDLE_TITLE = 1;
	public static final int BOTTOM_COMMENT = 2;
	/** 构造函数 */
	public CommentAdapter(Context context,HashMap<Integer, Object> dataHash) {
		this.mContext = context;
		this.mInflater = LayoutInflater.from(context);
		this.mDataHash = dataHash;
		this.commentList = (ArrayList<Comment>) dataHash.get(BOTTOM_COMMENT);
	}
	
	static class ViewHolder {
		 ImageView headImage;
		 TextView userName;
		 TextView time;
		 TextView content;
		 ImageView like;
		 TextView likeNum;
	}
	
	static class ViewHolderTheme {

		 ImageView headImage;
		 TextView userName;
		 TextView time;

		 TextView content;
		 ImageView picture;

		 ImageView like;
		 ImageView dislike;
		 ImageView share;
		 ImageView comment;

		 TextView likeNum;
		 TextView dislikeNum;
		 TextView shareNum;
		 TextView commentNum;
	}
	
	static class ViewHolderMiddle {
		TextView txtMiddle;
	}
	
	@Override
	public int getCount() {
		
		
		return commentList.size() + 2;
	}

	@Override
	public Object getItem(int position) {
		Object object;
		if(position < 2) {
			object = mDataHash.get(position);
		}else {
			object = commentList.size() + 2;
		}
		
		return object;
	}

	public HashMap<Integer, Object> getmDataHash() {
		return mDataHash;
	}

	public void setmDataHash(HashMap<Integer, Object> mDataHash) {
		this.mDataHash = mDataHash;
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolderTheme holderTheme = null;
		ViewHolderMiddle holderMiddle = null;
		ViewHolder holder = null;
		View view = convertView;
//		Log.d("SJY", String.valueOf(commentList.size()));
		Log.d("SJY", String.valueOf(position));
		int type = getItemViewType(position);
		// 观察convertView随ListView滚动情况
		if (view == null) {
			switch (type) {
			case TOP_THEME:
				holderTheme  = new ViewHolderTheme();
				view = mInflater.inflate(R.layout.theme_item, null);
				/** 得到各个控件的对象 */
				holderTheme.headImage = (ImageView) view.findViewById(R.id.imgUser);
				holderTheme.userName = (TextView) view.findViewById(R.id.txtUserName);
				holderTheme.time = (TextView) view.findViewById(R.id.txtPostTime);
				holderTheme.content = (TextView) view.findViewById(R.id.txtContent);
				holderTheme.picture = (ImageView) view.findViewById(R.id.picture);
				holderTheme.like = (ImageView) view.findViewById(R.id.imageLike);
				holderTheme.dislike = (ImageView) view.findViewById(R.id.imageDisLike);
				holderTheme.share = (ImageView) view.findViewById(R.id.imageForward);
				holderTheme.comment = (ImageView) view.findViewById(R.id.imageComment);
				holderTheme.likeNum = (TextView) view.findViewById(R.id.txtLikeNum);
				holderTheme.dislikeNum = (TextView) view.findViewById(R.id.txtDislikeNum);
				holderTheme.shareNum = (TextView) view.findViewById(R.id.txtForwardNum);
				holderTheme.commentNum = (TextView) view.findViewById(R.id.txtCommentNum);
				view.setTag(holderTheme);// 绑定ViewHolder对象
				
				
				break;

			case MIDDLE_TITLE:
				holderMiddle = new ViewHolderMiddle();
				view = mInflater.inflate(R.layout.middle_title_comment, null);
				holderMiddle.txtMiddle = (TextView) view.findViewById(R.id.txtMiddle);
				break;
			case BOTTOM_COMMENT: 
				view = mInflater.inflate(R.layout.comment_item, null);
				holder = new ViewHolder();
				
				/** 得到各个控件的对象 */
				holder.headImage = (ImageView) view.findViewById(R.id.imgUser);
				holder.userName = (TextView) view.findViewById(R.id.txtUserName);
				holder.time = (TextView) view.findViewById(R.id.txtCommentTime);
				holder.content = (TextView) view.findViewById(R.id.txtComment);
				holder.like = (ImageView) view.findViewById(R.id.imgLike);
				holder.likeNum = (TextView) view.findViewById(R.id.txtLikeNum);
				view.setTag(holder);// 绑定ViewHolder对象
				
				
				
				break;
			default:
			break;
			}
			
			
			
		} else {
			
			switch(type) {
			case TOP_THEME:
				holderTheme = (ViewHolderTheme) view.getTag();
				break;
			case MIDDLE_TITLE:
				holderMiddle = (ViewHolderMiddle) view.getTag();
				break;
			case BOTTOM_COMMENT:
				holder = (ViewHolder) view.getTag();
				break;
			}
			
		}
		
		switch (type) {
		case TOP_THEME:
			Theme theme = (Theme) mDataHash.get(TOP_THEME);
			if(theme != null) {
				holderTheme.userName.setText(theme.getUserName());
				holderTheme.time.setText(theme.getTime());
				holderTheme.content.setText(theme.getContent());
				holderTheme.likeNum.setText(String.valueOf(theme.getLikeNum()));
				holderTheme.dislikeNum.setText(String.valueOf(theme.getDislikeNum()));
				holderTheme.shareNum.setText(String.valueOf(theme.getShareNum()));
				holderTheme.commentNum.setText(String.valueOf(theme.getCommentNum()));
				
				holderTheme.headImage.setImageResource(R.drawable.head_image2);
				holderTheme.picture.setImageResource(R.drawable.picture);
				holderTheme.like.setImageResource(R.drawable.like);
				holderTheme.dislike.setImageResource(R.drawable.dislike);
				holderTheme.share.setImageResource(R.drawable.share);
				holderTheme.comment.setImageResource(R.drawable.comment);

				holderTheme.like.setOnClickListener(this);
				holderTheme.dislike.setOnClickListener(this);
				holderTheme.share.setOnClickListener(this);
				holderTheme.comment.setOnClickListener(this);
				
				
			}
			
			
			break;
		case MIDDLE_TITLE:
			String str = (String) mDataHash.get(MIDDLE_TITLE);
			holderMiddle.txtMiddle.setText(str);
			
			break;
		case BOTTOM_COMMENT:
			 
//			Log.d("SJY", String.valueOf(position));
			Comment comment = commentList.get(position-2);
				 holder.userName.setText(comment.getUserName());
				 holder.time.setText(comment.getTime());
				 holder.content.setText(comment.getContent());
				 holder.likeNum.setText(String.valueOf(comment.getLikeNum()));
			
			
//			 holder.headImage;
//			 holder.like;
			break;
		}
		
		
		return view;
	}

	
	@Override
	public int getViewTypeCount() {
		// TODO Auto-generated method stub
		return 3;
	}
	@Override
	public int getItemViewType(int position) {
		// TODO Auto-generated method stub
		if(position == 0) {
			return TOP_THEME;
		}else if(position == 1) {
			return MIDDLE_TITLE;
		}
		
		return BOTTOM_COMMENT;
	}
	@Override
	public void onClick(View v) {
		
	}

	
}

ListView快速上下滑动就出错了0



回复讨论(解决方案)

commentList 你打印下看这个是不是NULL
CommentList不为空
commentList 你打印下看这个是不是NULL

不为空
218行 报空指针  你218行是注释 那应该是219行Comment comment = commentList.get(position-2);
 这一行 能报空指针异常的只有commentList
218行 报空指针  你218行是注释 那应该是219行Comment comment = commentList.get(position-2);
 这一行 能报空指针异常的只有commentList
不好意思,其实是213行那错了。。。滑动很快时会报错,这是什么道理,会不会是控件没跟上什么什么的速度。
 你139行的 case MIDDLE_TITLE: 没有setTag
 你139行的 case MIDDLE_TITLE: 没有setTag
解决了,谢谢