Code Bye

adapter.notifyDataSetChanged执行的时候没有执行getview,adapter内容改变了

 

发现了一个奇怪的问题,adapter我改变了里面的内容,但是adapter.notifyDataSetChanged的时候却没有执行getview,不知道是我哪里写错了,求问


4分
你的adapter 跟listView 绑定了吗?
或者绑定被错误置换了?
getView 是由 listView 调用的。

4分
缓存!!
引用 2 楼 gao_chun 的回复:

缓存!!

应该不是缓存问题吧,,,

引用 1 楼 davidleen29 的回复:

你的adapter 跟listView 绑定了吗?
或者绑定被错误置换了?
getView 是由 listView 调用的。

这之前绑定了,不然一开始也不会显示了


4分
不会是getcount返回0吧

4分
是没有执行getView,还是执行了,界面没有刷新?

5分
最外层加个try catch 没报错???
代码贴出来看看

4分
引用 6 楼 lionfresh 的回复:

是没有执行getView,还是执行了,界面没有刷新?

同问


4分
看刷新是在哪做的,我有次始终刷新不了,后来检查是在resume中取的是旧数据
引用 6 楼 lionfresh 的回复:

是没有执行getView,还是执行了,界面没有刷新?

这明显说了没有执行


4分
引用 10 楼 heaimnmn 的回复:
Quote: 引用 6 楼 lionfresh 的回复:

是没有执行getView,还是执行了,界面没有刷新?

这明显说了没有执行

看看代码吧,还没遇到过你说的情况

引用 7 楼 hjywyj 的回复:

最外层加个try catch 没报错???
代码贴出来看看

它不报错的,只是不执行getview,,,

自己调试下,看看到底有没有执行呀
是不是初始化的时候adapter为空?我也遇到过这个问题

4分

你notifyDataSetChanged();之前,list.addAll(data);一下

引用 15 楼 u012374885 的回复:

你notifyDataSetChanged();之前,list.addAll(data);一下

我的adapter肯定不为空,一开始已经显示了,不能再add了


3分
引用 16 楼 heaimnmn 的回复:
Quote: 引用 15 楼 u012374885 的回复:

你notifyDataSetChanged();之前,list.addAll(data);一下

我的adapter肯定不为空,一开始已经显示了,不能再add了

你不是改变数据了吗?如果不重新addall的话好像listview里存的还是之前的list的引用

引用 17 楼 u012374885 的回复:
Quote: 引用 16 楼 heaimnmn 的回复:
Quote: 引用 15 楼 u012374885 的回复:

你notifyDataSetChanged();之前,list.addAll(data);一下

我的adapter肯定不为空,一开始已经显示了,不能再add了

你不是改变数据了吗?如果不重新addall的话好像listview里存的还是之前的list的引用

你应该多练下adapter了,,,

引用 18 楼 heaimnmn 的回复:
Quote: 引用 17 楼 u012374885 的回复:
Quote: 引用 16 楼 heaimnmn 的回复:
Quote: 引用 15 楼 u012374885 的回复:

你notifyDataSetChanged();之前,list.addAll(data);一下

我的adapter肯定不为空,一开始已经显示了,不能再add了

你不是改变数据了吗?如果不重新addall的话好像listview里存的还是之前的list的引用

你应该多练下adapter了,,,

我想成你要添加数据结果视view没更新了。。。
引用 6 楼 lionfresh 的回复:

是没有执行getView,还是执行了,界面没有刷新?

引用 11 楼 lionfresh 的回复:
Quote: 引用 10 楼 heaimnmn 的回复:
Quote: 引用 6 楼 lionfresh 的回复:

是没有执行getView,还是执行了,界面没有刷新?

这明显说了没有执行

看看代码吧,还没遇到过你说的情况

private Runnable runnable = new Runnable( ) {
public void run ( ) {
movies = getMyApp().getDownloadItems();//获取全局变量数据
if(movies != null) {
if(adapter != null) {
adapter.setMovies(movies);
adapter.notifyDataSetChanged();
}else {
adapter = new DownloadAdapter(getmContext(), listView, movies);
}
}
handler.postDelayed(this,1500);
}
};
情况这样,下载的时候会时时刷新,getview,下载好了以后就不会走getview了,这让我很蛋疼了,下载好不getview,就存在问题,当重新走生命周期的时候,listview不走getview,listview就为空,就不会显示了

引用 7 楼 hjywyj 的回复:

最外层加个try catch 没报错???
代码贴出来看看

private Runnable runnable = new Runnable( ) {
public void run ( ) {
movies = getMyApp().getDownloadItems();//获取全局变量数据
if(movies != null) {
if(adapter != null) {
adapter.setMovies(movies);
adapter.notifyDataSetChanged();
}else {
adapter = new DownloadAdapter(getmContext(), listView, movies);
}
}
handler.postDelayed(this,1500);
}
};
情况这样,下载的时候会时时刷新,getview,下载好了以后就不会走getview了,这让我很蛋疼了,下载好不getview,就存在问题,当重新走生命周期的时候,listview不走getview,listview就为空,就不会显示了

引用 21 楼 heaimnmn 的回复:
Quote: 引用 6 楼 lionfresh 的回复:

是没有执行getView,还是执行了,界面没有刷新?

引用 11 楼 lionfresh 的回复:
Quote: 引用 10 楼 heaimnmn 的回复:
Quote: 引用 6 楼 lionfresh 的回复:

是没有执行getView,还是执行了,界面没有刷新?

这明显说了没有执行

看看代码吧,还没遇到过你说的情况

private Runnable runnable = new Runnable( ) {
public void run ( ) {
movies = getMyApp().getDownloadItems();//获取全局变量数据
if(movies != null) {
if(adapter != null) {
adapter.setMovies(movies);
adapter.notifyDataSetChanged();
}else {
adapter = new DownloadAdapter(getmContext(), listView, movies);
}
}
handler.postDelayed(this,1500);
}
};
情况这样,下载的时候会时时刷新,getview,下载好了以后就不会走getview了,这让我很蛋疼了,下载好不getview,就存在问题,当重新走生命周期的时候,listview不走getview,listview就为空,就不会显示了

你movies为空时就不走下面的逻辑了,adapter的相关操作就不执行了。

引用 23 楼 lionfresh 的回复:
Quote: 引用 21 楼 heaimnmn 的回复:
Quote: 引用 6 楼 lionfresh 的回复:

是没有执行getView,还是执行了,界面没有刷新?

引用 11 楼 lionfresh 的回复:
Quote: 引用 10 楼 heaimnmn 的回复:
Quote: 引用 6 楼 lionfresh 的回复:

是没有执行getView,还是执行了,界面没有刷新?

这明显说了没有执行

看看代码吧,还没遇到过你说的情况

private Runnable runnable = new Runnable( ) {
public void run ( ) {
movies = getMyApp().getDownloadItems();//获取全局变量数据
if(movies != null) {
if(adapter != null) {
adapter.setMovies(movies);
adapter.notifyDataSetChanged();
}else {
adapter = new DownloadAdapter(getmContext(), listView, movies);
}
}
handler.postDelayed(this,1500);
}
};
情况这样,下载的时候会时时刷新,getview,下载好了以后就不会走getview了,这让我很蛋疼了,下载好不getview,就存在问题,当重新走生命周期的时候,listview不走getview,listview就为空,就不会显示了

你movies为空时就不走下面的逻辑了,adapter的相关操作就不执行了。

movies不可能为空,因为这是全局变量,并且有值,但是就是不走getview

一般来说,如果数据源不变化的话,那么notifyDataSetChanged()也没有作用,当然数据变化了,view有显示的缓存,也不需要getview
看看  adapter 的代码

特别是  setMovies  跟 构造函数。

还是自己解决了,哎,谢谢大家帮助
引用 27 楼 heaimnmn 的回复:

还是自己解决了,哎,谢谢大家帮助

说说是什么原因和解决方法啊,给大家分享下

引用 28 楼 lionfresh 的回复:
Quote: 引用 27 楼 heaimnmn 的回复:

还是自己解决了,哎,谢谢大家帮助

说说是什么原因和解决方法啊,给大家分享下

由于线程阻塞了,不是所以感觉是执行了run没有执行getview,,,

我也遇到这个问题了。
不过我的原因是,因为加载数据的时候,显示的是一个LoadingView,加载完后,才显示ListView
我在显示LoadingView的时候调用adapter.notifyDataSetChanged就不会触发,原因大家懂得
我明显设置了,并且单步调试也走到了.  就是不走getView 
if (adapter !=null) {
adapter.addItem(GlobalModels.roomList.getRoomList());
adapter.notifyDataSetChanged();
}
楼主能说明白点吗?
能不能告诉下具体怎么解决的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明adapter.notifyDataSetChanged执行的时候没有执行getview,adapter内容改变了