title: Listview does not refresh when underlying Loader data changes
body: <p>First, I'll preface my question with the fact that I'm <em>not using a CursorLoader</em>.</p>
  
  <p>I'm pulling in data from a SQLlite database to populate a listview in a ListFragment.  The initial load works well, but once the data is manipulated (i.e. an addition is made to the list), the listview NEVER refreshes to show the new data.  I am implementing the Loader callbacks like so:</p>
  
  <pre><code>public class BillListingFragment extends ListFragment implements LoaderManager.LoaderCallbacks&lt;List&lt;Bill&gt;&gt; {
  
  private billListAdapter mAdapter;
  private static final int LOADER_ID = 1;
  private SQLiteDatabase mDatabase;
  private BillsDataSource mDataSource;
  private BillsStoreDatabaseHelper mDbHelper;
  /**
   * The fragment argument representing the fragment type (archive or outstanding)
   */
  private static final String ARG_FRAGMENT_TYPE = "fragment_type";
  
  /**
   * Returns a new instance of this fragment based on type
   */
  public static BillListingFragment newInstance(String type) {
      // TODO: Make the fragment type an enum
      BillListingFragment fragment = new BillListingFragment();
      Bundle args = new Bundle();
      args.putString(ARG_FRAGMENT_TYPE, type);
      fragment.setArguments(args);
      return fragment;
  }
  
  public BillListingFragment() {
  }
  
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                           Bundle savedInstanceState) {
      View rootView = inflater.inflate(R.layout.bill_view_layout, container, false);
      return rootView;
  }
  
  @Override
  public void onActivityCreated(Bundle savedInstanceState) {
      super.onActivityCreated(savedInstanceState);
      mDbHelper = new BillsStoreDatabaseHelper(getActivity());
      mDatabase = mDbHelper.getWritableDatabase();
      mDataSource = new BillsDataSource(mDatabase);
  
      mAdapter = new billListAdapter(getActivity(), R.layout.bill_row_layout);
      setListAdapter(mAdapter);
      getLoaderManager().initLoader(LOADER_ID, null, this);
  }
  
  @Override
  public Loader&lt;List&lt;Bill&gt;&gt; onCreateLoader(int id, Bundle args) {
      BillDataLoader loader = new BillDataLoader(getActivity(), mDataSource);
      return loader;
  }
  
  @Override
  public void onLoadFinished(Loader&lt;List&lt;Bill&gt;&gt; loader, List&lt;Bill&gt; data) {
      for(Bill bill: data){
          mAdapter.add(bill);
      }
      setListAdapter(mAdapter);
  }
  
  @Override
  public void onLoaderReset(Loader&lt;List&lt;Bill&gt;&gt; loader) {
      mAdapter.clear();
  }
  
  @Override
  public void onDestroy() {
      super.onDestroy();
      mDbHelper.close();
      mDatabase.close();
      mDataSource = null;
      mDbHelper = null;
      mDatabase = null;
  }
  
  public void reload(){
      getLoaderManager().restartLoader(LOADER_ID, null, this);
  }
  
  private class billListAdapter extends ArrayAdapter&lt;Bill&gt; {
      Context context;
  
      public billListAdapter(Context context, int resourceID){
          super(context, resourceID);
          this.context = context;
      }
  
  
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          if (convertView == null) {
              convertView = getActivity().getLayoutInflater().inflate(R.layout.bill_row_layout, parent, false);
          }
          TextView payToField = (TextView) convertView.findViewById(R.id.nameField);
          TextView dueDateField = (TextView) convertView.findViewById(R.id.overdueField);
  
          payToField.setText(getItem(position).getPayTo());
  
          // calculate days until due
          Bill bill = getItem(position);
  
          // TODO: Add how many days until bill in overdue field + add color
          JodaTimeAndroid.init(getActivity());
          DateTime dueDateDt = new DateTime(bill.getDateDue());
          DateTime currentDt = new DateTime();
          int daysDifference = Days.daysBetween(currentDt.toLocalDate(), dueDateDt.toLocalDate()).getDays();
  
          // depending on what that differential looks like set text / color
          if (daysDifference &gt; 1) {
              dueDateField.setText(Integer.toString(daysDifference) + " Days");
          } else {
              if (daysDifference == 0) {
                  dueDateField.setText("DUE TODAY");
              } else {
                  if (daysDifference &lt; 0) {
  
                  }
              }
          }
  
  
          return convertView;
      }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>I have debugged my code so I know that the onLoadFinished callback is being made after the data has been manipulated.  I also know that adapter contains the updated data at this point.  I have tried resetting the adapter via setListAdapter(mAdatper) and every notifyDataChanged-like method I can find, but to no avail.  What is going on here and how can I get the listview to update?</p>