Atualizando ListView com BaseAdapter e LoaderCallbacks<Cursor> é possível

Estou com dificuldades para atualizar minha lista quando adiciono ou removo um item da lista.

são 2 problemas que ocorrem: quando removo o item sai da lista, e é deletado do banco de dados, mas, a ordem que é removido da lista está errado, exemplo: tenho três itens, removo o num 2 mas na lista some o 1, se eu apagar todos, todos saem da lista mas, em ordem diferente da qual eu cliquei.
o outro problema é que eu não sei como atualizar a lista quando eu adiciono um item na tabela do banco de dados; eu tenho na tela acima da lista 2 campos EditText e um botão que ao pressionar adiciona o conteudo dos campo na base de dados e teria que atualizar a lista abaixo, mas não sei como fazer isso, ou como atualizar o meu adaptador.
se alguem puder me orientar, agradeço antecipadamente. Obrigado.

vejam meu códigos.


package br.com.ated.proj_sigmass_v01.fragment;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import br.com.ated.proj_sigmass_v01.AdapterResumo01;
import br.com.ated.proj_sigmass_v01.AnotacaoListener;
import br.com.ated.proj_sigmass_v01.R;
import br.com.ated.proj_sigmass_v01.VarGlobal;
import br.com.ated.proj_sigmass_v01.dao.BaseDados;
import br.com.ated.proj_sigmass_v01.entity.ECResumo1;

public class Resumo01 extends Fragment implements OnClickListener {

	private ListView listView;
	private BaseDados dao;
	private EditText et_numVeezes,	et_Ferramentas;
	private Button btn_adicionar;
                private ArrayList<ECResumo1> mSource;
                private int cod_id_audit = 0; 
    
	@Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
    
    	View view = inflater.inflate(R.layout.resumo01,container, false);
       	return view;     
    }
        
	
	@Override
	public void onStart(){
		super.onStart();		
		cod_id_audit = (((VarGlobal) getActivity().getApplication()).getId_audit());
		listView = (ListView) getActivity().findViewById(R.id.listaFerramentas);		
		dao = new BaseDados(getActivity());	
		
		
                              CarregaLista();		
		
			
		et_numVeezes = (EditText) getActivity().findViewById(R.id.numVeezes);	
		et_Ferramentas = (EditText) getActivity().findViewById(R.id.et_Ferramentas);
		btn_adicionar = (Button) getActivity().findViewById(R.id.btn_adicionar);

		btn_adicionar.setOnClickListener(this);	
	}

	
   public void CarregaLista(){
	   
		mSource = (ArrayList<ECResumo1>) dao.listarResumo1_por_idaudit(cod_id_audit);
		listView.setAdapter(new AdapterResumo01(getActivity(), mSource) );
		
	   
   }


@Override
public void onClick(View v) {
	
	if (v.getId() == R.id.btn_adicionar){
	   String iNumero = et_numVeezes.getText().toString();  
	   String iDescricao = et_Ferramentas.getText().toString(); 	
		ECResumo1 resumo = new ECResumo1();
		resumo.setNumero(iNumero);
		resumo.setDescricao(iDescricao);
		resumo.setId_audit(cod_id_audit);
		
	   dao.inserir(resumo);
	   
	   ((BaseAdapter) listView.getAdapter()).notifyDataSetChanged();
	   
	   et_numVeezes.setText("");
	   et_Ferramentas.setText("");
	}
	
}

}

Meu adaptador


package br.com.ated.proj_sigmass_v01;

	import java.util.ArrayList;
import java.util.List;

import br.com.ated.proj_sigmass_v01.dao.BaseDados;
import br.com.ated.proj_sigmass_v01.entity.ECResumo1;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

	public class AdapterResumo01 extends BaseAdapter {
	       
		        private ArrayList<DataSetObserver> observers = new ArrayList<DataSetObserver>(); 
		        private ListView listView;
		    	private Context context;		        
		        private List<ECResumo1> mSource;
		    	private LayoutInflater mInflater;
		    	private ViewHolder holder;
		    	private AnotacaoListener callback;	
		        private BaseDados dao;
		        private BaseAdapter adapter; // = (BaseAdapter) listView.getAdapter();
		        private int posicao;
		    
		        static class ViewHolder{
		    		private Button Btn_Excluir;
			        private TextView tv_numeros; 
			        private TextView tv_ferramentas;
		    	}	        		        

				@Override
				public int getCount() {
					
				 if (mSource != null){
					 return mSource.size();
				 }
				 
				 return 0;
				}

				
				@Override
				public Object getItem(int position) {
//					mSource = (ArrayList<ECResumo1>) dao.listarResumo1_por_idaudit((((VarGlobal) context.getApplicationContext()).getId_audit()));
					
					if (mSource != null && position >= 0 && position < getCount()){
						ECResumo1 fase = this.mSource.get(position);
						return fase;
					}				
					
					return null;
				}

				
				
				@Override
				public long getItemId(int position) {
					mSource = (ArrayList<ECResumo1>) dao.listarResumo1_por_idaudit((((VarGlobal) context.getApplicationContext()).getId_audit()));
					
					if (mSource != null && position >= 0 && position < getCount()){	
					   ECResumo1 fase = this.mSource.get(position);
					   return fase.getId();
					}
					
					return 0;
				}				
			
	    	
		    	
	 public AdapterResumo01(Context context, List<ECResumo1> mSource) {
			        mInflater = LayoutInflater.from(context);
			        this.mSource = mSource;
			        this.context = context;
			        
			         
	 }
	 
	 
	            @Override
		        public View getView(int position, View convertView, ViewGroup parent) {
		            dao = new BaseDados(context);
		            posicao = position;
		            
		            final ECResumo1 fase = this.mSource.get(position);
		            View view = convertView; 
		            
		            if (convertView != null) {
		            	holder = (ViewHolder) view.getTag();	
		            }
		            else{
		            	view = mInflater.inflate(R.layout.resumo01_dados, null);
		                holder = new ViewHolder();		              	
		               
		               //  listView = (ListView) view.findViewById(R.id.listaFerramentas); 
		    		    // adapter = (BaseAdapter) listView.getAdapter();
		               
		                holder.tv_numeros  = (TextView) view.findViewById(R.id.tv_numeros);
		                holder.tv_ferramentas  = (TextView) view.findViewById(R.id.tv_ferramentas);
		                holder.Btn_Excluir  = (Button) view.findViewById(R.id.Btn_Excluir);

		                holder.Btn_Excluir.setOnClickListener(new OnClickListener() {

		        		@Override
		        		public void onClick(View v) {
		        			      
		        		if (v.getId() == R.id.Btn_Excluir){		        			    	 
		        		   	 
		        			 AlertDialog alertDialog = new AlertDialog.Builder(context).create();  
		        		     alertDialog.setTitle("Deseja realmente excluir?");  
		        		     alertDialog.setIcon(R.drawable.ic_launcher);  
		        		     alertDialog.setMessage(fase.getId().toString()+ " Ao clicar em SIM será excluído permanentemente!");  
		        		     
		        		     alertDialog.setButton("SIM", new DialogInterface.OnClickListener() {  
		        		     
		        		    	 public void onClick(DialogInterface dialog, int which) {  
		        		                        
		        		    		 
		        		    		   // metodo de exclusão
		            		              dao.removerResumo1((long) fase.getId());
		                               // metodo que regarrega a lista
		        		            	   mSource.remove(posicao);
		        		            	   notifyDataSetChanged();
		        		               
		        		                   }  
		        			    	   
         		        		     });
		        		  
		        		     alertDialog.setButton2("NÃO", new DialogInterface.OnClickListener() {  
		                         public void onClick(DialogInterface dialog, int which) {  
		                             return;  
		                       }   
		                      }); 
		        		     
		                   alertDialog.show();  
		                 
		        		          }
		        		
		        		      }
		        			     
		        			});
		        		     
		        		     
	            	view.setTag(holder);
		            
	            }
	            
		              ECResumo1 res = mSource.get(position);
		              holder.tv_numeros.setText(res.getNumero());
				      holder.tv_ferramentas.setText(res.getDescricao());		
			        
		        	
		            return view;
		        }

	            
public void registerDataSetObserver(DataSetObserver observer){
	observers.add(observer);
	
}
	            
public void notifyDataSetChanged(){
	for (DataSetObserver observer: observers){
	     observer.onChanged();	
	
	}
	
}
	}