notifyDataSetChanged不起作用

 

这几天做项目,需要展现一个下拉刷新和上拉载入的ListView,下拉刷新从服务器取数据,下拉载入从数据库取数据。本来没什么问题,网上例子讲解一堆,但是问题是就是出不来。

dataList2 = getDataList(RWXX.RWZT_UPLOAD);
            if (dataList2.size() > 0) {
                myadapter2 = new MyAdapter(this, dataList2, RWXX.RWZT_UPLOAD);
                listView2 = (RefreshListView) ((LinearLayout) views[index])
                        .getChildAt(0);
                listView2.setAdapter(myadapter2);

                if(dataList2.size() >= listcount) {
                    listView2.addFooterView(mLoadLayout);
                    listView2.setOnScrollListener(new AbsListView.OnScrollListener() {
                        @Override
                        public void onScrollStateChanged(AbsListView view, int scrollState) {
                            //正在滚动时回调,回调2-3次,手指没抛则回调2次。scrollState = 2的这次不回调     
                            //回调顺序如下     
                            //第1次:scrollState = SCROLL_STATE_TOUCH_SCROLL(1) 正在滚动     
                            //第2次:scrollState = SCROLL_STATE_FLING(2) 手指做了抛的动作(手指离开屏幕前,用力滑了一下)     
                            //第3次:scrollState = SCROLL_STATE_IDLE(0) 停止滚动     
                         
                            //当滚到最后一行且停止滚动时,执行加载     
                            if (isScrollToEnd && scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
                                //满足条件,加载数据
                                if (view.getLastVisiblePosition() == view.getCount() - 1) {
                                    new Thread(
                                        new Runnable() {
                                            public void run() {
                                                businessObj.setListScrolltimes(scrollTimes += 1);
                                                //改变数据
                                                AppendData(RWXX.RWZT_UPLOAD);
                                                Log.i(TAG, "加载新数据 " + dataList2.size());
                                            }
                                        }
                                    ).start();
                                    
                                    /*mHandler.postDelayed(new Runnable() {
                                        @Override
                                        public void run() {
                                            
                                            
                                        }
                                    }, 0);*/
                                    // 上传附件开始提示消息
                                    Message msg = messagehandler.obtainMessage();
                                    msg.what = DATA_LOADING;
                                    messagehandler.sendMessage(msg);
                                    
                                    }
                                        isScrollToEnd = false;
                                    }

                                }
                        
                        @Override
                        public void onScroll(AbsListView view, int firstVisibleItem,
                                int visibleItemCount, int totalItemCount) {
                            //滚动时一直回调,直到停止滚动时才停止回调。单击时回调一次。     
                            //firstVisibleItem:当前能看见的第一个列表项ID(从0开始)     
                            //visibleItemCount:当前能看见的列表项个数(小半个也算)     
                            //totalItemCount:列表项共数   
                            
                            /** 判断是否滚到最后一行 */
                            if (firstVisibleItem + visibleItemCount == totalItemCount
                                    && totalItemCount > 0) {
                                Log.i(TAG, "加载新数据... ");
                                isScrollToEnd = true;
                                mProgressLoadLayout.setVisibility(View.VISIBLE);
                                mLoadLayout.setVisibility(View.VISIBLE);
                            } 
                        }
                    });
                }


可是问题是数据改变了,界面什么效果都没有!

开始是直接读取数据,赋给数据集合dataList2,一直没有任何效果。

网上查找原因,有一些说法是adapter的数据源没有任何变化,导致ListView 不会刷新。

后来仅仅是改成addAll(Collections)就可以了。实在是太自以为然了,不是一个客观的、尽职的程序员啊!

特地记下此地,以后少走弯路!

 

 

posted @ 2012-12-13 13:45  Liu Siyuan  阅读(1236)  评论(0编辑  收藏  举报