У меня проблема с навигацией в моем приложении. У меня есть два вида деятельности: MainActivity и FormActivity. Основной вид деятельности имеет компоновку ящика, в зависимости от выбранного элемента он загружает фрагмент:MainActivity вызывает onDestroy при навигации вверх
private void selectItem (int position) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
Fragment fragment = null;
previousNavigationItem = position;
switch (position)
{
case DASHBOARD_FRAGMENT:
fragment = new DashboardFragment();
mTitle = getResources().getString(R.string.title_dashboard);
break;
case LIST1_FRAGMENT:
fragment = new ListFragment();
mTitle = getResources().getString(R.string.title_list1);
break;
case LIST2_FRAGMENT:
fragment = new ListFragment();
mTitle = getResources().getString(R.string.title_list2);
break;
default:
Log.w(AppController.ERROR_TAG, "Index out of bounds in changeFragment");
}
if (fragmentTransaction != null && fragment!=null) {
fragment.setRetainInstance(true);
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
ListFragment загружает ListView с некоторых строк, когда один элемент выбран он начинает новый FormActivity:
protected void startForm(FormActivity.FORM_ACTION action, String dataClass, int groupPosition, long groupId) {
Intent data = new Intent(getActivity(), FormActivity.class);
data.setAction(action.toString());
data.putExtra(FormActivity.BUNDLE_KEY_GROUP_POSITION, groupPosition);
data.putExtra(FormActivity.BUNDLE_KEY_FORM_CLASS, dataClass);
data.putExtra(FormActivity.BUNDLE_KEY_GROUP_ID, groupId);
startActivityForResult(data, FormActivity.FORM_REQUEST_CODE);
}
в FormActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_form);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
Fragment fragment = null;
try {
(...I do some casting here but nothing to do with the problem..)
fragment = new FormFragment();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
if (fragmentTransaction != null && fragment!=null)
fragmentTransaction.replace(R.id.form_frame, fragment).commit();
}
Все работает, как ожидалось, за исключением, когда я вернуться обратно с помощью кнопки HomeUp, MainActivity, уничтожается затем воссоздан снова, и са vedInstance не сохраняется.
Я прочитал всю документацию от разработчиков Android, но до сих пор не нашел преступника.
Edit:
В MainActivity
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
Log.d(AppController.DEBUG_TAG, "MainActivity onRestoreInstanceState");
super.onRestoreInstanceState(savedInstanceState);
// Restore the previously serialized current dropdown position.
if (savedInstanceState.containsKey(STATE_SELECTED_NAVIGATION_ITEM)) {
getSupportActionBar().setSelectedNavigationItem(savedInstanceState.getInt(STATE_SELECTED_NAVIGATION_ITEM));
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
Log.d(AppController.DEBUG_TAG, "MainActivity onSaveInstanceState");
super.onSaveInstanceState(outState);
// Serialize the current dropdown position.
outState.putInt(STATE_SELECTED_NAVIGATION_ITEM,
getSupportActionBar().getSelectedNavigationIndex());
Log.d(AppController.DEBUG_TAG, "Selected item id in Navigation Drawer: " + mDrawerList.getSelectedItemId());
}
Проверьте это. http://stackoverflow.com/a/16426803/832749 –
@Siddharth, спасибо за ваш ответ, я проверил варианты dev и «Do not keep activities» дезактивирован. – spacebiker