@Override
        public void onLoadFinished(
            final Loader<Set<Transaction>> loader, final Set<Transaction> transactions) {
          BlockListFragment.this.transactions = transactions;

          adapter.notifyDataSetChanged();
        }
        @Override
        public void onLoaderReset(final Loader<Set<Transaction>> loader) {
          BlockListFragment.this.transactions.clear(); // be nice
          BlockListFragment.this.transactions = null;

          adapter.notifyDataSetChanged();
        }
        @Override
        public void onLoadFinished(
            final Loader<List<StoredBlock>> loader, final List<StoredBlock> blocks) {
          adapter.replace(blocks);

          final Loader<Set<Transaction>> transactionLoader =
              loaderManager.getLoader(ID_TRANSACTION_LOADER);
          if (transactionLoader != null && transactionLoader.isStarted())
            transactionLoader.forceLoad();
        }
  @Override
  public void onResume() {
    super.onResume();

    activity.registerReceiver(tickReceiver, new IntentFilter(Intent.ACTION_TIME_TICK));

    loaderManager.initLoader(ID_TRANSACTION_LOADER, null, transactionLoaderCallbacks);

    adapter.notifyDataSetChanged();
  }
  @Override
  public void onListItemClick(final ListView l, final View v, final int position, final long id) {
    final StoredBlock storedBlock = adapter.getItem(position);

    activity.startActionMode(
        new ActionMode.Callback() {
          @Override
          public boolean onCreateActionMode(final ActionMode mode, final Menu menu) {
            final MenuInflater inflater = mode.getMenuInflater();
            inflater.inflate(R.menu.blocks_context, menu);

            return true;
          }

          @Override
          public boolean onPrepareActionMode(final ActionMode mode, final Menu menu) {
            mode.setTitle(Integer.toString(storedBlock.getHeight()));
            mode.setSubtitle(storedBlock.getHeader().getHashAsString());

            return true;
          }

          @Override
          public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) {
            switch (item.getItemId()) {
              case R.id.blocks_context_browse:
                startActivity(
                    new Intent(
                        Intent.ACTION_VIEW,
                        Uri.parse(
                            Constants.EXPLORE_BASE_URL
                                + "block/"
                                + storedBlock.getHeader().getHashAsString())));

                mode.finish();
                return true;
            }

            return false;
          }

          @Override
          public void onDestroyActionMode(final ActionMode mode) {}
        });
  }
 private void renderBlockList() {
   ListAdapter listAdapter = mListView.getAdapter();
   if (listAdapter instanceof BlockListAdapter) {
     ((BlockListAdapter) listAdapter).notifyDataSetChanged();
   } else {
     BlockListAdapter adapter = new BlockListAdapter();
     mListView.setAdapter(adapter);
     mListView.setOnItemClickListener(
         new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             mBlockStartTime = mBlockEntries.get(position).timeStart;
             updateUi();
           }
         });
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
       invalidateOptionsMenu();
       ActionBar actionBar = getActionBar();
       if (actionBar != null) {
         actionBar.setDisplayHomeAsUpEnabled(false);
       }
     }
     setTitle(getString(R.string.block_canary_block_list_title, getPackageName()));
     mActionButton.setText(R.string.block_canary_delete_all);
     mActionButton.setOnClickListener(
         new View.OnClickListener() {
           @Override
           public void onClick(View v) {
             LogWriter.deleteLogFiles();
             mBlockEntries = Collections.emptyList();
             updateUi();
           }
         });
   }
   mActionButton.setVisibility(mBlockEntries.size() == 0 ? GONE : VISIBLE);
 }
 @Override
 public void onLoaderReset(final Loader<List<StoredBlock>> loader) {
   adapter.clear();
 }
 @Override
 public void onReceive(final Context context, final Intent intent) {
   adapter.notifyDataSetChanged();
 }