这是我的代码
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没有显示任何内容。问题是什么?
答案 0 :(得分:17)
看起来您正在更改初始化适配器的集合。我会以这种方式更改您的代码:
// 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();
编辑:感谢您的评论,我现在更了解您想要做的事情。您可能希望让适配器将其内容替换为您的不同ArrayLists。我会让你的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();
答案 1 :(得分:5)
为什么它在第一个代码中有效?
---因为您要将值设置为temp
列表并将其传递给adapter
并将其显示为listview
。
为什么不在第二个代码中工作?
---因为您在将值设置为temp 之前将 temp设置为适配器 第二,当您将新值设置为temp时,您的适配器类可能无法获取更新的值。因为 temp不是公共的或不是类级别的,或者不是静态的。 将temp声明放在root级别并尝试。
如果您收到任何警告,请尽快显示您的完整代码和Logcat。
答案 2 :(得分:4)
在正确的xml文件中检查引用视图的链接。或至少检查是否存在所述xml文件。
答案 3 :(得分:3)
您使用的适配器是什么?很明显,在temp变量中设置数据后,适配器没有得到更新。