Tengo una aplicación que utiliza fragmentos, todos los cuales están contenidos en una sola actividad. La actividad comienza con un fragmento que contiene un menú de botones, todos los cuales causan varios fragmentos de lista para reemplazar el botón original/fragmento de menú.Lista de mantenimiento en el fragmento de lista en el cambio de orientación
Mi problema es que en un cambio de orientación, si la actividad muestra una de las vistas de lista, desaparece y vuelve el menú del botón. Entiendo por qué sucede esto ... la actividad se destruye y vuelve a crear, pero no cómo evitarla y mantener la vista de lista/fragmento actual a través del cambio de orientación.
He encontrado setRetainInstance
y el ejemplo de uso here, pero no puedo encontrar la manera de aplicarlo a mi situación con el menú de botones o la posibilidad de que el fragmento que deseo conservar sea uno de varios unos.
A continuación se muestra un código simplificado para mostrar la actividad principal y uno de los listfragments.
Cualquier puntero en qué agregar dónde hacerlo para que se conserve el fragmento de la lista sería muy apreciado.
Actividad
public class Main extends FragmentActivity {
private MainMenuFragment menu;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
menu = new MainMenuFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.pane, menu).commit();
}
}
ListFragment
public class ItemListFragment extends ListFragment {
private TextView header;
private TextView empty;
private Button add;
public static Cursor itemCursor;
private GroceryDB mDbHelper;
public static long mRowId;
public static CheckCursorAdapter lists;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.common_list, container, false);
header = (TextView) v.findViewById(R.id.header);
empty = (TextView) v.findViewById(android.R.id.empty);
header.setText(R.string.header_item);
empty.setText(R.string.empty_items);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mRowId=0;
mDbHelper = new GroceryDB(getActivity());
mDbHelper.open();
itemCursor = mDbHelper.fetchAllItems();
getActivity().startManagingCursor(itemCursor);
String[] from = new String[] { GroceryDB.ITEM_NAME };
int[] to = new int[] { R.id.ListItem };
lists = new CheckCursorAdapter(getActivity(),
R.layout.listlayout_itemlist, itemCursor, from, to);
setListAdapter(lists);
}
}
Bueno, eso fue increíblemente embarazoso (por no hablar de tonto de mí). Yo ** sé ** que debo verificar para savedInstanceState(), pero por alguna razón no lo hice esta vez y nunca lo pensé. Gracias por la rápida respuesta. – Barak