It can be very difficult (for you and for us!) to diagnose a problem when confronted with a mountain of code.
The tried and true way of dealing with this is to construct a small simple example of the code. Basically create a whole new application designed to illustrate the problem. This is never fun, but it can be very productive. I know from my own experience that, as often as not, I solve a problem in the course of constructing such an example. Remove the clutter, and the problem becomes more visible.
When dealing with something like an Android project there is a limit to what you can do, but aim for a single Activity app without fragments/splash screens/etc and a very minimal number of widgets (which can be added in code rather using .xml). The Activity should put a few entries into the database and offer to sort them.
---
One thing I noticed was that when "Sort" is selected from the menu you have:
} else if (item.getItemId() == R.id.sort) {
myDataSource.open();
myDataSource.sortWords();
myDataSource.close();
//finish();
}
Unless I am missing something (quite possible) calling myDataSource.sortWords() returns you a Cursor. But you aren't doing anything with this cursor.
In ListFragment's onCreateView() you say
cursor = mDataSource.selectAllWords();
and proceed to populate an ArrayList based on that Cursor which does not have any sorting.
Maybe I'm missing something, but when the user asks for sorted data, shouldn't the fragment recalculate the ArrayList based on a "sorting" cursor? Simply calling sortWords() returns you a Cursor but it makes no change to the order of the data in the database.