1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-16 06:25:06 -05:00

Properly keep selection in case of a

configuration change (orientation, keyboard, etc.) during user
interaction (e.g. a dialog)
This commit is contained in:
Fiouz 2011-06-05 01:16:34 +02:00
parent 5366a07f28
commit de7b75a1df

View File

@ -679,12 +679,12 @@ public class MessageList
mListView.setAdapter(mAdapter); mListView.setAdapter(mAdapter);
} }
@SuppressWarnings("unchecked")
private void restorePreviousData() { private void restorePreviousData() {
final Object previousData = getLastNonConfigurationInstance(); final ActivityState previousData = getLastNonConfigurationInstance();
if (previousData != null) { if (previousData != null) {
mAdapter.messages.addAll((List<MessageInfoHolder>) previousData); mAdapter.messages.addAll(previousData.messages);
mActiveMessages = previousData.activeMessages;
} }
} }
@ -832,9 +832,45 @@ public class MessageList
mListView.setOnTouchListener(gestureListener); mListView.setOnTouchListener(gestureListener);
} }
/**
* Container for values to be kept while the device configuration is
* modified at runtime (keyboard, orientation, etc.) and Android restarts
* this activity.
*
* @see MessageList#onRetainNonConfigurationInstance()
* @see MessageList#getLastNonConfigurationInstance()
*/
static class ActivityState {
public List<MessageInfoHolder> messages;
public List<MessageInfoHolder> activeMessages;
}
/* (non-Javadoc)
*
* Method overriden for proper typing within this class (the return type is
* more specific than the super implementation)
*
* @see android.app.Activity#onRetainNonConfigurationInstance()
*/
@Override @Override
public Object onRetainNonConfigurationInstance() { public ActivityState onRetainNonConfigurationInstance() {
return mAdapter.messages; final ActivityState state = new ActivityState();
state.messages = mAdapter.messages;
state.activeMessages = mActiveMessages;
return state;
}
/*
* (non-Javadoc)
*
* Method overriden for proper typing within this class (the return type is
* more specific than the super implementation)
*
* @see android.app.Activity#getLastNonConfigurationInstance()
*/
@Override
public ActivityState getLastNonConfigurationInstance() {
return (ActivityState) super.getLastNonConfigurationInstance();
} }
@Override @Override