我使用ListActivity和ArrayAdapter为Sdcard文件创建了一个ListView。 它运作良好。
然后我想在ListView中添加一个额外的项目。所以我添加了一个项目列表并调用了notifyDataSetChanged()。 但它显示了力量接近。为什么? 帮助我。
FilenameFilter fnf=new FilenameFilter()
{
public boolean accept(File dir, String filename) {
// TODO Auto-generated method stub
if(new File(dir+"/"+filename).isDirectory())
return true;
else
return false;
}
};
filelist=sdcard.list(fnf);
List<String> list=Arrays.asList(filelist);
Collections.sort(list);
ArrayAdapter<String> listadap=new ArrayAdapter<String>(this,R.layout.filelist,R.id.listview,list);
setListAdapter(listadap);
list.add("Test");
listadap.notifyDataSetChanged();
答案 0 :(得分:1)
如果您想以动态方式更改ListView的内容。创建CustomAdapter
,从BaseAdapter
延伸。将列表传递给适配器的构造函数。重写BaseAdapter
interface。
在适配器中添加add方法。您将在适配器中实例化List(将其保存在构造函数的字段中)。方法add,将项目添加到'ArrayList',然后只是this.notifyDataChanged()
(这,因为你在CustomAdapter
)
此方法将解决使用适配器重新创建的ListView中的跳转问题。
答案 1 :(得分:0)
为什么在设置适配器后放置List.add("Test");
?
你可以改变吗。
FilenameFilter fnf=new FilenameFilter()
{
public boolean accept(File dir, String filename) {
// TODO Auto-generated method stub
if(new File(dir+"/"+filename).isDirectory())
return true;
else
return false;
}
};
filelist=sdcard.list(fnf);
List<String> list=Arrays.asList(filelist);
list.add("Test");
Collections.sort(list);
ArrayAdapter<String> listadap=new ArrayAdapter<String>(this,R.layout.filelist,R.id.listview,list);
setListAdapter(listadap);
//listadap.notifyDataSetChanged();
答案 2 :(得分:0)
感谢您的帮助。
我找到了另一个将Button添加到Listview的解决方案。
bt_up=new Button(this);
bt_up.setText("Up");
getListView().addView(bt_up);
这也适用于TextView。