У меня есть listfragment, который запускает actionmode. Я использую actionbarsherlock. Но когда меняется ориентация, или когда я запускаю новую активность, контекстуальный экран действий исчезает. Есть ли способ восстановить его, не запустив его снова? В приложении gogle gmail он остается на экране, поворачиваю ли я телефон или перехожу на экран подробных сведений.
Восстановить ActionMode после изменения ориентации
Ответ 1
Лучше всего использовать onSaveInstanceState для сохранения состояния ActionMode перед вращением.
public abstract class MyActivity extends SherlockFragmentActivity{
private boolean isInActionMode = false;
@Override
public void onCreate(Bundle state){
super.onCreate(state);
if (state != null && state.getBoolean("ActionMode", false)){
startActionMode(new MyActionMode());
}else{
///whatever you'd normally do
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
// Save isInActionMode value
outState.putBoolean("ActionMode", isInActionMode);
super.onSaveInstanceState(outState);
}
public void onWhateverEventNormallyStartsYourActionMode(){
startActionMode(new MyActionMode());
}
public class MyActionMode implements ActionMode.Callback{
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
isInActionMode = true;
///whatever you'd normally do
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
///whatever you'd normally do
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
///whatever you'd normally do
}
@Override
public void onDestroyActionMode(ActionMode mode) {
isInActionMode = false;
}
}
}
Обновлено в соответствии с комментарием Сарана.