listview不用notifydatasetchanged()调用更新

这是我的代码

listview =(ListView) findViewById(R.id.lv1); ArrayList<SClass> Monday = new ArrayList<SClass>(); SClass s1=new SClass(); s1.sName="samp"; s1.salary=1000; Monday.add(s1); temp=Monday; adapter = new CustomAdap(this, temp); listview.setAdapter(adapter); 

上面的代码工作正常。但是当我改变我的代码到这个

  listview =(ListView) findViewById(R.id.lv1); adapter = new CustomAdap(this, temp); SClass s1=new SClass(); s1.sName="samp"; s1.salary=1000; Monday.add(s1); temp=Monday; listview.setAdapter(adapter); adapter.notifyDataSetChanged(); 

Listview没有显示任何内容,问题是什么?

Solutions Collecting From Web of "listview不用notifydatasetchanged()调用更新"

它看起来像你正在改变你初始化适配器的集合。 我会以这种方式更改你的代码:

 // initial setup listview =(ListView) findViewById(R.id.lv1); ArrayList<SClass> Monday = new ArrayList<SClass>(); adapter = new CustomAdap(this, Monday); listview.setAdapter(adapter); // change your model Monday here, since it is what the adapter is observing SClass s1=new SubjectClass(); s1.sName="samp"; s1.salary=1000; Monday.add(s1); // notify the list that the underlying model has changed adapter.notifyDataSetChanged(); 

注意,如果你的CustomAdap是ArrayAdapter的子类,你也可以完成

 // change your array adapter here SClass s1=new SubjectClass(); s1.sName="samp"; s1.salary=1000; adapter.add(s1); // notify the list that the underlying model has changed adapter.notifyDataSetChanged(); 

编辑:我明白更多你想要做什么,感谢您的评论。 你可能会希望让适配器用你不同的ArrayListreplace它的内容。 我会让你的CustomAdap是ArrayAdapter的一个子类。

那么你可以这样利用它:

 // replace the array adapters contents with the ArrayList corresponding to the day adapter.clear(); adapter.addAll(MONDAY); // notify the list that the underlying model has changed adapter.notifyDataSetChanged(); 

为什么它在第一个代码中工作?

—因为您将值设置为temp列表并将其传递给adapter并将其显示到listview

为什么不用第二个代码工作?

—因为在将值设置为临时值之前,您已经将适配器设置为远程适配器
第二,当你将新的值设置为临时值时,你的适配器类可能没有得到更新的值..因为temp不是公共的或者不是在类级别或者不是静态的 。把temp声明放在根级别,然后尝试。

如果您收到任何警告,请按照要求和Logcat显示您的完整代码。

检查在正确的xml文件中的引用视图的链接。 或者至less检查是否存在所述的XML文件。

你使用什么适配器? 很显然你的适配器没有得到更新后,你的临时variables设置数据的情况下。