Atualizar um SimpleCursorAdapter após executar o trabalho em um thread que não seja da interface do usuário

Estou tentando chamar .notifyDataSetChange () em um SimpleCursorAdapter exibido em um ListView a partir de um thread que não seja de interface do usuário para análise de XML e não consigo descobrir como. Pesquisei por toda parte e encontrei artigos que falam sobre a atualização a partir do próprio ListView, o que não estou fazendo. Não consigo descobrir uma maneira de passar o adaptador ou obtê-lo dos pais ou o que for necessário para chamar um método nele de outro encadeamento.

O ListView será atualizado na próxima vez que iniciar a atividade, mas quero que ele seja atualizado assim que a análise XML for concluída, para que o usuário veja os novos dados imediatamente.

A resposta é provavelmente simples; está apenas me iludindo. Agradecemos antecipadamente por qualquer ajuda!

Aqui está o meu código:

public class DirectoryListActivity extends DirectoryActivity {

public final Handler mHandler = new Handler();

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.directory_list);

    // Populate the ListView
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(
        directoryPeople.PEOPLE_TABLE
    );

    String asColumnsToReturn[] = { 
            //snip
    };

    mCursor = queryBuilder.query(mDB, asColumnsToReturn, null, null,
            null, null, directoryPeople.DEFAULT_SORT_ORDER);

    startManagingCursor(mCursor);

// HERE'S THE ADAPTER
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
            R.layout.directory_people_item, mCursor,
            new String[]{
                //snip
            new int[]{
                //snip
    ); 

    ListView av = (ListView)findViewById(R.id.listPeople);
    av.setAdapter(adapter);

    //Perform sync in background
    startXMLParseThread();

}

    public void startXMLParseThread() {

    new Thread () {

        boolean success = false;

        public void run() {
            try {
                // XML-Parsing and Table-Updating code

            } catch (Exception e) {
                success = false;
            }

            mHandler.post(new Runnable() {
                public void run() {
                    TextView txtUpdateStatus = (TextView)findViewById(R.id.txtUpdateStatus);
                    if (success) {
                        txtUpdateStatus.setText(R.string.synced);
                    } else {
                        txtUpdateStatus.setText(R.string.sync_failed);
                    }
                    adapter.notifyDataSetChanged(); // ECLIPSE HATES
                }
            });
        }
    }.start();
    }
}
}

questionAnswers(2)

yourAnswerToTheQuestion