2012-03-15 10 views
0

SdcardファイルのListActivityとArrayAdapterを使用してListViewを作成しました。 うまくいきます。ListActivityに1つ余分な項目を追加

次にListViewに1つの余分な項目を追加したいと思います。リストに1つの項目を追加して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(); 
+1

force-closeの場合はlogcatを入れます –

+0

Logcat:http://pastebin.com/yfXmBwD8 –

答えて

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

あなたのリストビューの内容をdinamically変更する場合。 CustomAdapterを作成し、BaseAdapterから拡張します。アダプターのコンストラクターにリストを渡します。 BaseAdapterインターフェイスのメソッドを書き直します。

そして、アダプタにaddメソッドを追加します。アダプタ内でListがインスタンス化されます(コンストラクタのフィールドに保存されます)。メソッドaddは、 'ArrayList'にアイテムを追加して、this.notifyDataChanged()(これはCustomAdapterに入っているため)

このメソッドは、ListView with Adapterレクレーションのjumplの問題を解決します。

0

ご協力ありがとうございます。

ボタンをリストビューに追加する別の方法が見つかりました。

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

これはTextViewでも有効です。

関連する問題