您的位置:首页 > 其它

对数据操作后,设置了adapter.notifyDataSetChanged() ListView数据不更新

2015-04-16 22:59 232 查看

对数据操作后,设置了adapter.notifyDataSetChanged() ListView数据不更新

public void oncreate(){

                collectDao dao=new collectDao(this);

                collects= dao.findAll(); //实现数据查询,这里我将方法封装在dao里面了。
                adapter=new MyAdapter();   
                listView.setAdapter(adapter);
               adapter.notifyDataSetChanged();

                                     }

上面的方法我是重写在oncreate()里面,我实现的是收藏功能,然后取消收藏了,但是ListView内容不更新。

跟朋友讨论得到了答案,activity生命周期是 oncreate()->onstart()->onresume()->onpause()->onstop()->ondestroy,

当你从取消的activity跳到这个activity,除非你用standard模式来加载,这样数据会更新,但是会创建太多的activity,

你返回的时候回觉得太繁琐了,但是你用singleTask来加载的话,你会发现数据不更新,这时候你应该重写onresume()方法。

    public void onResume(){
                       collectDao dao=new collectDao(this);
                       collects= dao.findAll();
                       listView.setAdapter(adapter);
                       adapter.notifyDataSetChanged();
                       super.onResume();
                                           }

这个问题困扰我好久,但是想想确实是这样的,遇到这样困惑的人,希望能给你们帮助吧

---------------------------------------------------------------------------------分割线-----------------------------------------------------------

  

   这已经是去年的帖子了,那时候我还在了解activity的生命周期,话说过了这么久,其实我好像在android方面没有懂什么,说来惭愧呀,哎,自己的经历真的是一把辛酸泪。在此劝告应届生不要因为急着找工作,就随便选一家公司,要知道你刚毕业或者即将毕业,在学校是不会学到什么东西的,当然也有一些在学校很努力的,底子会好很多。不管怎样,还是找一个有开发经验的工作人员的公司吧,有个工作经验的带你,你会成长很快,由于你刚出来,外面的世界都是新的,即使项目的代码你还有很多不懂,但是你是充满好奇心的,相信只要接触了,离懂就不会很远了。

   下面我修改我以前的观点,我们知道启动一个activity(或者说让当前activity为前台,就是让我们能够看得到)一定会调用onResume方法的,我上面这样写,如楼下评论的那样,真的没必要,我打开activity后,首先调用的onCreate方法,这里面我已经对数据进行的处理,后面会调用onResume方法,没必要调用两次,只需要在onNewIntent里写这个操作了,因为A activity 在栈中只是在B activity下面,此时B activity处于前台,此时需要让A activity从后台调到前台,且重新加载A
activity的数据,这时候是不会调用OnCreate 方法,当利用Intent到A activity后,A activity就为前台了,此时会调用onNewIntent()->onRestart()->onStart()->onResume(), 所以写在 onNewIntent()里面。

   其实也完全没必要写在onNewIntent()里,为什么这么说呢,因为一个activity要想在前台,必须经历onResume,相反一个activity在后台也会回调onPause(),所以在这里面写上逻辑代码就可以了,至于onCreate()只要在里面初始化一些工作,绑定布局。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐