J'utilise la navigation déroulante et, en raison de certains problèmes de thème, j'utilise un Spinner pour cela. J'utilise la méthode suivante pour mettre en place la actionbar:Les fragments ne sont pas conservés lors du changement d'orientation
public void setupActionBar() {
Spinner navSpinner = new Spinner(new ContextThemeWrapper(this, R.style.Theme_Apptheme_Widget_ActionBarSpinner));
navSpinner.setSelection(getSharedPreferences(APP_NAME, MODE_PRIVATE).getInt(SELECTED_POSITION, 0));
Log.d(getClass().getName(), navSpinner.getSelectedItemPosition() + "");
navSpinner.setAdapter(new ActionBarSpinnerAdapter(getActionBar().getThemedContext(), dataSource.getAllShoppingLists()));
navSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (position < dataSource.getAllShoppingLists().size()) {
if(fragmentManager.findFragmentByTag("shoppinglist" + position) == null) {
ShoppingListFragment shoppingListFragment = ShoppingListFragment.
newInstance(dataSource.getShoppingListForPosition(position).getId());
fragmentTransaction.replace(R.id.container, shoppingListFragment, "shoppinglist" + position);
}
} else if (position == dataSource.getAllShoppingLists().size()) {
if(fragmentManager.findFragmentByTag("shoppinglistmanager") == null) {
ShoppingListManagerFragment shoppingListFragment = ShoppingListManagerFragment.newInstance();
fragmentTransaction.replace(R.id.container, shoppingListFragment, "shoppinglistmanager");
}
}
fragmentTransaction.commit();
SharedPreferences preferences = getSharedPreferences(APP_NAME, MODE_PRIVATE);
preferences.edit().putInt(SELECTED_POSITION, position).commit();
}
});
getActionBar().setCustomView(navSpinner);
}
J'appelle setRetainInstance(true);
sur le onCreate()
de Fragment
, mais les fragments ne sont pas persisté. Je vérifie cela en ayant EditText et en y entrant du texte. Pourquoi cela arrive-t-il?
Comment vous écartez-vous du Fragment? Êtes-vous détruire l'activité? – yiati
@yiati Je fais tourner l'appareil –
D'où vient la source de données variable? Il est probable que les identifiants que vous recevez ne sont pas ce que vous voulez. Une alternative à l'utilisation des ID pour restaurer des fragments consiste à utiliser [onSaveInstanceState] (http://developer.android.com/reference/android/app/Fragment.html#onSaveInstanceState (android.os.Bundle)) et [onViewStateRestored] (http://developer.android.com/reference/android/app/Fragment.html#onViewStateRestored(android.os.Bundle)) de la classe Fragment pour sauvegarder les valeurs primitives et les utiliser pour recréer le fragment. – yiati