in un frammento, chiamato in una delle attività che sto visualizzando un elenco di linee di autobus in questo modo:Modifica ActionBar quando si utilizza frammenti
Poi, una volta che l'utente fa clic su "Stazioni", mi piace per mostrare un elenco di stazioni, naturalmente. Sto usando questo codice:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_long_distance);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.f_long_distance, new LongDistanceFragment()).commit();
}
@SuppressWarnings({"UnusedDeclaration"})
public void showStationList(View view) {
String tag = (String) view.getTag();
if (tag != null && tag.length() > 0) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
StationListFragment fragment = new StationListFragment(tag.split(","));
ft.add(R.id.f_long_distance, fragment);
// ft.replace(R.id.f_long_distance, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}
}
L'XML per questa attività è:
<LinearLayout
android:id="@+id/ll_container"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<FrameLayout
android:id="@+id/f_long_distance"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
StationListFragment è un semplice ListFragment visualizzata sopra l'altro:
Ciò che funziona bene è ActionBar, ora contiene correttamente il titolo solo.
Ciò che non funziona è se si preme indietro ora. la lista delle stazioni è nascosto, ma il vecchio ActionBar non viene ripristinato:
I documenti dicono che il modo per aggiungere l'ActionBar sta usando metodi onCreateOptionsMenu ecc
Così, in LongDistanceFragment (la prima quella mostrata), sto creando il bar come questo:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
Log.d(TAG, "onViewCreated");
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
ActionBar bar = getSupportActivity().getSupportActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
bar.setListNavigationCallbacks(new SimpleSpinnerArrayAdapter(getActivity()), this);
}
Ma in qualche modo non viene ripristinata una volta che l'utente è tornato in quel frammento.
Penso che un modo per ripristinare lo stato di ActionBar quando è necessario eseguire il rollback della transazione Fragment.
Cosa mi manca? Grazie per qualsiasi aiuto.
Anche io sto combattendo con questo al momento. Ecco una domanda correlata. http://stackoverflow.com/questions/6503189/fragments-onresume-from-back-stack –