Gezinme Çekmecesini kullanırken Android geliştiricileri, ActionBar'da "yalnızca Gezinme Çekmecesinde temsil edilen ekranların gerçekte Gezinme Çekmecesi görüntüsüne sahip olmasını" ve "diğer tüm ekranların geleneksel yukarı karatın olmasını" önerir.
Ayrıntılar için buraya bakın: http://youtu.be/F5COhlbpIbY
Birden fazla düzeydeki parçayı kontrol etmek için tek bir etkinlik kullanıyorum ve Gezinme Çekmecesi görüntüsünü her seviyede görüntüleyebilir ve çalıştırabilirim.
Daha düşük seviye parçaları oluştururken ActionBarDrawerToggle
setDrawerIndicatorEnabled(false)
Gezinme Çekmecesi görüntüsünü gizlemek ve Yukarı işaretini görüntülemek için
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();
Yaşadığım sorun, en üst düzey parçalara geri döndüğümde, yukarı gezinti orijinal Gezinti Çekmecesi görüntüsü yerine hala gösteriliyor. Gezinme Çekmecesi görüntüsünü yeniden görüntülemek için üst düzey parçalarda ActionBar'ın nasıl "yenileneceği" konusunda herhangi bir öneriniz var mı?
Çözüm
Tom'un önerisi benim için çalıştı. İşte yaptım:
Ana aktivite
Bu etkinlik uygulamadaki tüm parçaları kontrol eder.
Başkalarını değiştirmek için yeni parçalar hazırlarken, DrawerToggle'ı şu şekilde ayarladım 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();
Sonra, geçersiz onBackPressed
kılmada, DrawerToggle'ı şu şekilde ayarlayarak yukarıdakileri geri aldım setDrawerIndicatorEnabled(true)
:
@Override
public void onBackPressed() {
super.onBackPressed();
// turn on the Navigation Drawer image;
// this is called in the LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
LowerLevelFragments'ta
Değiştirdiğim onCreate
ve onOptionsItemSelected
beğendiğim parçalarda :
In onCreate
eklenen setHasOptionsMenu(true)
seçenekler menüsünü yapılandırarak etkinleştirmek için. Ayrıca set setDisplayHomeAsUpEnabled(true)
etkinleştirmek için < İşlem Çubuğu içinde:
@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);
}
Ardından < tuşuna onOptionsItemSelected
her basıldığında , hiyerarşide bir düzey yukarı çıkmak ve Gezinme Çekmecesi Görüntüsünü görüntülemek için etkinlikten çağrılır:onBackPressed()
@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;
…
}
.replace(R.id.frag_layout
. Eğer bu bir başka hiyerarşi seviyesi ise sizden .add
backstack'e gitmenizi beklerdim.
theDrawerToggle.setDrawerIndicatorEnabled(false);
parçanın içine nasıl atıfta bulunuyorsun ? Ana Faaliyet sınıfı dosyasında bildirildiğini düşünüyorum. Bu referans için bir yol bulamıyorum. İpucu var mı?
setDisplayOptions()
yöntem ToolbarWidgetWrapper
, aynı parçayı ikinci kez girerken simgeyi yeniden oluşturmaz. Diğerleri de bu sorunla karşılaştıklarında bunu burada bırakıyorum.