The issue that you're changing the displayed view, but not the underlying data. When the adapter needs to recreate the view, it uses the data which hasn't changed.
Given that, the best approach is to change the data and tell the adapter to update, rather than changing the views themselves.
Add a changeable list and use it in the adapter:
ArrayList<String> displayed;
// in loadActivity
displayed = new ArrayList<String>(Arrays.asList(capital));
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, displayed));
Then change the data when a list item's clicked and notify the adapter:
// In onListItemClick
if (displayed.get(position).equals(answer[position])) {
displayed.set(position, capital[position]);
} else {
displayed.set(position, answer[position]);
}
((ArrayAdapter) getListAdapter()).notifyDataSetChanged();