在实现给ListView添加item时遇到一个问题,当程序在初始化的时候添加item可以成功显示,但是之后再动态添加item就无法正确的显示,通过Log可以发现已经添加成功了,并且在程序退出的一瞬间可以看到被添加的item。void AddListItem(int iType,String str1,String str2){
    Map<String,Object> item;  
    item = new HashMap<String,Object>();  
    item.put("pic",R.drawable.pic+iType);  
    item.put("name",str1);
    item.put("exp",str2); 
    listdata.add(item);
    ListAdapter la = listView.getAdapter();
    ((SimpleAdapter)la).notifyDataSetChanged();
}初始化和动态添加都是调用的同一个函数。
是不是还有哪个地方需要设置啊?

解决方案 »

  1.   

    要边调编看,多打几个log看看啊。我觉得是((SimpleAdapter)la).notifyDataSetChanged();没起作用,界面没有刷新
      

  2.   

    是不是你的adapter的getview方法有问题?
      

  3.   

    问题已解决,是我网上下的MyScrollLayout这个类的问题。 protected void onLayout(boolean changed, int l, int t, int r, int b) {
    // if (changed) {    这句要去掉。
                int childLeft = 0;    
                final int childCount = getChildCount();                     
                for (int i=0; i<childCount; i++) {    
                    final View childView = getChildAt(i);    
                    if (childView.getVisibility() != View.GONE) {    
                        final int childWidth = childView.getMeasuredWidth();    
                        childView.layout(childLeft, 0,     
                                childLeft+childWidth, childView.getMeasuredHeight());    
                        childLeft += childWidth;    
                    }    
                }    
            //}
    }写出来给以后的人用,免得又浪费时间。给分,结贴。
      

  4.   

    问题已解决,是网上下载的左右滑动的类MyScrollLayout中的一个问题。 protected void onLayout(boolean changed, int l, int t, int r, int b) {
    // if (changed) {    这句不要
                int childLeft = 0;    
                final int childCount = getChildCount();                     
                for (int i=0; i<childCount; i++) {    
                    final View childView = getChildAt(i);    
                    if (childView.getVisibility() != View.GONE) {    
                        final int childWidth = childView.getMeasuredWidth();    
                        childView.layout(childLeft, 0,     
                                childLeft+childWidth, childView.getMeasuredHeight());    
                        childLeft += childWidth;    
                    }    
                }    
            //}
    }
    写出来以免后人浪费时间。给分,结贴。顺便BS一下CSDN,害我写了两遍。