Під час використання ящика навігації пристрої Android
рекомендують, щоб в ActionBar "лише ті екрани, які відображаються в
ящику навігації, повинні мати зображення з ящиком навігації" і що
"всі інші екрани мають традиційну карат".
See here for details: http://youtu.be/F5COhlbpIbY
Я використовую одну операцію для керування кількома рівнями
фрагментів і може отримати зображення ящиків навігації для
відображення та функціонування на всіх рівнях.
При створенні фрагментів нижчого рівня я можу викликати
ActionBarDrawerToggle
setDrawerIndicatorEnabled
(false)
, щоб приховати зображення ящика навігації та
відображати вікно Up
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag, "lowerFrag").addToBackStack(null).commit();
Проблема, яка виникає у мене, коли я переміщуюсь до фрагментів
верхнього рівня, досі показує показник "Up", а не оригінальний
образ ящика для навігації. Будь-які пропозиції щодо того, як
"оновити" ActionBar на фрагментах верхнього рівня, щоб повторно
відобразити зображення ящика навігації?
Рішення
Том запропонував мені працювати. Ось що я зробив:
Основна активність
Ця дія контролює всі фрагменти у додатку.
Під час підготовки нових фрагментів для заміни інших я встановив
DrawerToggle setDrawerIndicatorEnabled (false)
таким
чином:
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag).addToBackStack(null).commit();
Далі, переопределяючи onBackPressed
, я повернув
вищенаведене, встановивши DrawerToggle на
setDrawerIndicatorEnabled (true)
, подібно до
цього:
@Override
public void onBackPressed() {
super.onBackPressed();
//turn on the Navigation Drawer image;
//this is called У LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
У LowerLevelFragments
У фрагментах я змінив onCreate
та
onOptionsItemSelected
таким чином:
In onCreate
added
setHasOptionsMenu(true)
to enable configuring the
options menu. Also set setDisplayHomeAsUpEnabled(true)
to enable the < in the actionbar:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//needed to indicate that the fragment would
//like to add items to the Options Menu
setHasOptionsMenu(true);
//update the actionbar to show the up carat/affordance
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
Then in onOptionsItemSelected
whenever the
< is pressed it calls the onBackPressed()
from the activity to move up one level in the hierarchy and display
the Navigation Drawer Image:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
//Get item selected and deal with it
switch (item.getItemId()) {
case android.R.id.home:
//called when the up affordance/carat in actionbar is pressed
getActivity().onBackPressed();
return true;
…
}