The key seems to be not using the builder set listener or adapter settings. When I do my own handling of events, it seems to work just fine.
protected void onPrepareDialogBuilder(Builder builder) {
CharSequence[] entries = getEntries();
CharSequence[] entryValues = getEntryValues();
if (entries == null || entryValues == null
|| entries.length != entryValues.length) {
throw new IllegalStateException(
"SortableListPreference requires an entries array and an entryValues "
+ "array which are both the same length");
}
for (CharSequence entry:entries)
mAdapter.add(entry);
mListView.setDropListener(new DropListener()
{
@Override
public void drop(int from, int to) {
CharSequence item = mAdapter.getItem(from);
Log.v(TAG,"Moving item "+item+" from "+from+" to "+to);
mAdapter.remove(item);
mAdapter.insert(item, to);
mAdapter.notifyDataSetChanged();
}
});
}