解决方案 »

  1.   

    估计是你的 adapter 中 getView 的地方有问题,你可以发出来,大家帮忙看看
      

  2.   

    这是我重写的baseadapter,大侠帮忙看下getview有什么问题
    package com.example.startmenu;import java.util.ArrayList;
    import java.util.List;import com.example.startmenu.AsyncImageLoader.ImageCallback;import android.app.Activity;
    import android.graphics.drawable.Drawable;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;public class ImageAndTextListAdapter extends BaseAdapter { private LayoutInflater inflater;
        private ListView listView;
        private AsyncImageLoader asyncImageLoader;
            private DBUtil dbUtil;
        private List<String> dataArray=new ArrayList<String>();     public ImageAndTextListAdapter(Activity activity, List<String> imageAndTexts, ListView listView) {         this.listView = listView;
            asyncImageLoader = new AsyncImageLoader();
            inflater = activity.getLayoutInflater();
            //dbu=new DBUtil();
            dataArray=imageAndTexts;
        }
        
    @Override
    public int getCount() {
    // TODO Auto-generated method stub
    return dataArray.size();
    }
    @Override
    public Object getItem(int position) {
    // TODO Auto-generated method stub
    if(position >= getCount()){
    return null;
    }
    return dataArray.get(position);
    }
    @Override
    public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
    }     //不需要ViewHolder版,直接将ImageAndText与XML资源关联起来
        public View getView(int position, View convertView, ViewGroup parent) 
        {
    if (convertView == null) 
    {
     convertView = inflater.inflate(R.layout.pulldown_item, null);
    }
    convertView.setTag(position);

    //{
    int i=(position+1)*6;

    if(i<=dataArray.size())
    {
    TextView textView0 =  (TextView) convertView.findViewById(R.id.txt_id); 
    TextView textView =  (TextView) convertView.findViewById(R.id.txt_Cno1); 
    TextView textView1 =  (TextView) convertView.findViewById(R.id.txt_Cname1); 
    TextView textView2=  (TextView) convertView.findViewById(R.id.txt_Cnum1); 
    TextView textView3 =  (TextView) convertView.findViewById(R.id.txt_isnuanqi1); 
    // 将XML视图项与用户输入的URL和文本在绑定
    textView0.setText(dataArray.get(i-6).toString());
    textView.setText(dataArray.get(i-5).toString());//加载TEXT
    textView1.setText(dataArray.get(i-4).toString());
    textView2.setText(dataArray.get(i-3).toString());
    textView3.setText(dataArray.get(i-2).toString());
    String imageUrl =dataArray.get(i-1).toString();

    ImageView iv = (ImageView) convertView.findViewById(R.id.imageView1);
    iv.setBackgroundResource(R.drawable.rc_item_bg);
    //System.out.print(dataArray.toArray().toString());
    asyncImageLoader.loadDrawable(position,imageUrl, new ImageCallback() 
    {
    @Override
    public void onImageLoad(Integer pos, Drawable drawable) 
    {
    View view = listView.findViewWithTag(pos);
    System.out.print(dataArray.get(pos).toString()+"---------------------asdfadsfsdafsdafsdaf----------------");
    if(view != null)
    {
    ImageView iv = (ImageView) view.findViewById(R.id.imageView1);
    iv.setBackgroundDrawable(drawable);
    }
    }
    //加载不成功的图片处理
    @Override
    public void onError(Integer pos) 
    {
    View view = listView.findViewWithTag(pos);
    if(view != null)
    {
    ImageView iv = (ImageView) view.findViewById(R.id.imageView1);
    iv.setBackgroundResource(R.drawable.rc_item_bg);
    }
    }

    });}
            return convertView;
    }
    }
      
      

  3.   

    这个是自定义listview
    package com.example.startmenu;import android.content.Context;
    import android.os.Handler;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.AbsListView;
    import android.widget.ListView;
    /**
     * 个可以监听ListView是否滚动到最顶部或最底部的自定义控件
     * 只能监听由触摸产生的,如果是ListView本身Flying导致的,则不能监
     * 如果加以改进,可以实现监听scroll滚动的具体位置等
     * @author solo ho  Email:[email protected]
     */public class ScrollOverListView extends ListView { private int mLastY;
    private int mTopPosition;
    private int mBottomPosition;
    private int lastVisibileItem;
    private View loadingView;
    private Handler mHandler;
    private ImageAndTextListAdapter  mListAdapter;
    //private TextView tvLoading;
    public int visibleIndex = 0;
    //private List<String> list;
    //private List<String> listLoad;
    private int count = 0;
    public ScrollOverListView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
    } public ScrollOverListView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
    } public ScrollOverListView(Context context) {
    super(context);
    init();
    } private void init(){
    mTopPosition = 0;
    mBottomPosition = 0;
    }
    public void onScrollStateChanged(AbsListView view, int scrollState) {

    if(scrollState == OnScrollListener.SCROLL_STATE_IDLE && (lastVisibileItem+1) == this.getCount()){

    mHandler = new Handler();
    mHandler.postDelayed(new Runnable(){
    @Override
    public void run() {

    mListAdapter.notifyDataSetChanged();   
    }
    }, 800);
    }
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
    final int action = ev.getAction();
    final int y = (int) ev.getRawY();

    switch(action){
    case MotionEvent.ACTION_DOWN:{
    mLastY = y;
    final boolean isHandled = mOnScrollOverListener.onMotionDown(ev);
    if (isHandled) {
    mLastY = y;
    return isHandled;
    }
    break;
    }

    case MotionEvent.ACTION_MOVE:{
    final int childCount = getChildCount();
    if(childCount == 0) return super.onTouchEvent(ev);

    final int itemCount = getAdapter().getCount() - mBottomPosition;

    final int deltaY = y - mLastY;
    //DLog.d("lastY=%d y=%d", mLastY, y);

    final int firstTop = getChildAt(0).getTop();
    final int listPadding = getListPaddingTop();

    final int lastBottom = getChildAt(childCount - 1).getBottom();
    final int end = getHeight() - getPaddingBottom();

    final int firstVisiblePosition = getFirstVisiblePosition();

    final boolean isHandleMotionMove = mOnScrollOverListener.onMotionMove(ev, deltaY);

    if(isHandleMotionMove){
    mLastY = y;
    return true;
    }

    //DLog.d("firstVisiblePosition=%d firstTop=%d listPaddingTop=%d deltaY=%d", firstVisiblePosition, firstTop, listPadding, deltaY);
    if (firstVisiblePosition <= mTopPosition && firstTop >= listPadding && deltaY > 0) {
                final boolean isHandleOnListViewTopAndPullDown;
                isHandleOnListViewTopAndPullDown = mOnScrollOverListener.onListViewTopAndPullDown(deltaY);
                if(isHandleOnListViewTopAndPullDown){
                 mLastY = y;
                return true;
                }
            }

    // DLog.d("lastBottom=%d end=%d deltaY=%d", lastBottom, end, deltaY);
            if (firstVisiblePosition + childCount >= itemCount && lastBottom <= end && deltaY < 0) {
             final boolean isHandleOnListViewBottomAndPullDown;
             isHandleOnListViewBottomAndPullDown = mOnScrollOverListener.onListViewBottomAndPullUp(deltaY);
             if(isHandleOnListViewBottomAndPullDown){
             mLastY = y;
             return true;
             }
            }
    break;
    }

    case MotionEvent.ACTION_UP:{
    final boolean isHandlerMotionUp = mOnScrollOverListener.onMotionUp(ev);
    if (isHandlerMotionUp) {
    mLastY = y;
    return true;
    }
    break;
    }
    }

    mLastY = y;
    return super.onTouchEvent(ev);
    }


    /**空的*/
    private OnScrollOverListener mOnScrollOverListener = new OnScrollOverListener(){ @Override
    public boolean onListViewTopAndPullDown(int delta) {
    return false;
    } @Override
    public boolean onListViewBottomAndPullUp(int delta) {
    return false;
    } @Override
    public boolean onMotionDown(MotionEvent ev) {
    return false;
    } @Override
    public boolean onMotionMove(MotionEvent ev, int delta) {
    return false;
    } @Override
    public boolean onMotionUp(MotionEvent ev) {
    return false;
    }

    };







    // =============================== public method =============================== /**
     * 可以自定义其中一个条目为头部,头部触发的事件将以这个为准,默认为第一�?
     * 
     * @param index 正数第几个,必须在条目数范围之内
     */
    public void setTopPosition(int index){
    if(getAdapter() == null)
    throw new NullPointerException("You must set adapter before setTopPosition!");
    if(index < 0)
    throw new IllegalArgumentException("Top position must > 0");

    mTopPosition = index;
    }

    /**
     * 可以自定义其中一个条目为尾部,尾部触发的事件将以这个为准,默认为�?后一�?
     * 
     * @param index 倒数第几个,必须在条目数范围之内
     */
    public void setBottomPosition(int index){
    if(getAdapter() == null)
    throw new NullPointerException("You must set adapter before setBottonPosition!");
    if(index < 0)
    throw new IllegalArgumentException("Bottom position must > 0");

    mBottomPosition = index;
    } /**
     * 设置这个Listener可以监听是否到达顶端,或者是否到达低端等事件</br>
     * 
     * @see OnScrollOverListener
     */
    public void setOnScrollOverListener(OnScrollOverListener onScrollOverListener){
    mOnScrollOverListener = onScrollOverListener;
    }

    /**
     * 滚动监听接口</br>
     * @see ScrollOverListView#setOnScrollOverListener(OnScrollOverListener)
     * 
     * @author solo ho</br> Email:[email protected]
     */
    public interface OnScrollOverListener {

    /**
     * 到达�?顶部触发
     * 
     * @param delta 手指点击移动产生的偏移量
     * @return 
     */
    boolean onListViewTopAndPullDown(int delta); /**
     * 到达�?底部触发
     * 
     * @param delta 手指点击移动产生的偏移量
     * @return 
     */
    boolean onListViewBottomAndPullUp(int delta);

    /**
     * 手指触摸按下触发,相当于{@link MotionEvent#ACTION_DOWN}
     * 
     * @return 返回true表示自己处理
     * @see View#onTouchEvent(MotionEvent)
     */
    boolean onMotionDown(MotionEvent ev);

    /**
     * 手指触摸移动触发,相当于{@link MotionEvent#ACTION_MOVE}
     * 
     * @return 返回true表示自己处理
     * @see View#onTouchEvent(MotionEvent)
     */
    boolean onMotionMove(MotionEvent ev, int delta);

    /**
     * 手指触摸后提起触发,相当于{@link MotionEvent#ACTION_UP} 
     * 
     * @return 返回true表示自己处理
     * @see View#onTouchEvent(MotionEvent)
     */
    boolean onMotionUp(MotionEvent ev);

    }
    }
      

  4.   


    package com.example.startmenu;import java.util.ArrayList;
    import java.util.List;import com.example.startmenu.AsyncImageLoader.ImageCallback;import android.app.Activity;
    import android.graphics.drawable.Drawable;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.ListView;
    import android.widget.TextView;public class ImageAndTextListAdapter extends BaseAdapter { private LayoutInflater inflater;
        private ListView listView;
        private AsyncImageLoader asyncImageLoader;
            private DBUtil dbUtil;
        private List<String> dataArray=new ArrayList<String>();     public ImageAndTextListAdapter(Activity activity, List<String> imageAndTexts, ListView listView) {         this.listView = listView;
            asyncImageLoader = new AsyncImageLoader();
            inflater = activity.getLayoutInflater();
            //dbu=new DBUtil();
            dataArray=imageAndTexts;
        }
        
    @Override
    public int getCount() {
    // TODO Auto-generated method stub
    return dataArray.size();
    }
    @Override
    public Object getItem(int position) {
    // TODO Auto-generated method stub
    if(position >= getCount()){
    return null;
    }
    return dataArray.get(position);
    }
    @Override
    public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
    }     //不需要ViewHolder版,直接将ImageAndText与XML资源关联起来
        public View getView(int position, View convertView, ViewGroup parent) 
        {
    if (convertView == null) 
    {
     convertView = inflater.inflate(R.layout.pulldown_item, null);
    }
    convertView.setTag(position);

    //{
    int i=(position+1)*6;

    if(i<=dataArray.size())
    {
    TextView textView0 =  (TextView) convertView.findViewById(R.id.txt_id); 
    TextView textView =  (TextView) convertView.findViewById(R.id.txt_Cno1); 
    TextView textView1 =  (TextView) convertView.findViewById(R.id.txt_Cname1); 
    TextView textView2=  (TextView) convertView.findViewById(R.id.txt_Cnum1); 
    TextView textView3 =  (TextView) convertView.findViewById(R.id.txt_isnuanqi1); 
    // 将XML视图项与用户输入的URL和文本在绑定
    textView0.setText(dataArray.get(i-6).toString());
    textView.setText(dataArray.get(i-5).toString());//加载TEXT
    textView1.setText(dataArray.get(i-4).toString());
    textView2.setText(dataArray.get(i-3).toString());
    textView3.setText(dataArray.get(i-2).toString());
    String imageUrl =dataArray.get(i-1).toString();

    ImageView iv = (ImageView) convertView.findViewById(R.id.imageView1);
    iv.setBackgroundResource(R.drawable.rc_item_bg);
    //System.out.print(dataArray.toArray().toString());
    asyncImageLoader.loadDrawable(position,imageUrl, new ImageCallback() 
    {
    @Override
    public void onImageLoad(Integer pos, Drawable drawable) 
    {
    View view = listView.findViewWithTag(pos);
    System.out.print(dataArray.get(pos).toString()+"---------------------asdfadsfsdafsdafsdaf----------------");
    if(view != null)
    {
    ImageView iv = (ImageView) view.findViewById(R.id.imageView1);
    iv.setBackgroundDrawable(drawable);
    }
    }
    //加载不成功的图片处理
    @Override
    public void onError(Integer pos) 
    {
    View view = listView.findViewWithTag(pos);
    if(view != null)
    {
    ImageView iv = (ImageView) view.findViewById(R.id.imageView1);
    iv.setBackgroundResource(R.drawable.rc_item_bg);
    }
    }

    });}
            return convertView;
    }
    }