2012-03-15 64 views
0

我创建了ListView使用ListActivity和ArrayAdapter的SD卡文件。 它运作良好。添加一个额外的项目ListActivity

然后我想添加一个额外的项目ListView.So我添加了一个项目列表并调用notifyDataSetChanged()。 但它显示力量close.Why? 帮帮我。

 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(); 
+1

把logcat强行关闭 – 2012-03-15 12:41:57

+0

Logcat:http://pastebin.com/yfXmBwD8 – 2012-03-15 12:55:28

回答

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(); 
1

如果你想改变你的ListView的内容dinamically。创建您的CustomAdapter,从BaseAdapter延伸。将列表传递给适配器的构造函数。重写接口的方法BaseAdapter

并在适配器中添加add方法。您将在适配器中将List实例化(将其保存在构造函数的字段中)。该方法将添加项目添加到'ArrayList',然后,只是this.notifyDataChanged()(这是因为你在CustomAdapter

此方法将解决与适配器重新创建ListView跳转问题。

0

感谢您的帮助。

我发现了另一种将按钮添加到我的列表视图的解决方案。

bt_up=new Button(this); 
bt_up.setText("Up"); 
getListView().addView(bt_up); 

这也适用于TextView。

相关问题