ListView の getAdapter() を上手に使う

Listの変化を ListView に反映させたい時、BaseAdapter notifyDataSetChanged()
呼ぶわけだが、ListView の行のクリックや長押しでの実行は簡単だが、
他のイベント、ListView とは別に配置した Button クリックで呼ぶ場合など、
ちょっと工夫が必要である。
ListView の getAdapter() を使うのである。

List<E> list; // グローバル変数
   :
   :
final LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ListView listview = (ListView)findViewById(R.id.listView);
listview.setAdapter(new BaseAdapter(){
   @Override
   public View getView(int position,View convertView,ViewGroup parent){
      View view = convertView==null ? layoutInflater.inflate(android.R.layout.simple_list_item_1,null) : convertView;
      E e = list.get(position);
      if (e != null){
         TextView text1 = (TextView)view.findViewById(android.R.id.text1);
         text1.setText(e.toString());
      }
      return view;
   }

   @Override
   public long getItemId(int position){
      return position;
   }
   @Override
   public Object getItem(int location){
      return list.get(location);
   }
   @Override
   public int getCount(){
      return list.size();
   }
});
*1.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v){
      // List を変更
      *2.notifyDataSetChanged();
   }
});

*1:Button)findViewById(R.id.deletebutton

*2:BaseAdapter)listview.getAdapter(