SORU
23 HAZİRAN 2013, Pazar


Android Navigasyon Çekmece görüntü arasında geçiş ve parçaları kullanıldığında şapka

Kullanırken Navigasyon Çekmece Android geliştiriciler tavsiye edilir bunun ActionBar "sadece o ekrandan gösterilen Gezinti Çekmece gerekir aslında Navigasyon Çekmece görüntü" ve "tüm diğer ekranlar geleneksel Yukarı karat."

Ayrıntılar için buraya bakın: http://youtu.be/F5COhlbpIbY

Bir aktivite parçalarının birden çok düzeyleri kontrol etmek için kullanıyorum ve Navigasyon Çekmece görüntü ve her düzeyde gösterimi için alabilir.

Alt seviye parçaları oluştururkenActionBarDrawerToggle setDrawerIndicatorEnabled(false) Navigasyon Çekmece görüntüyü gizlemek ve şapka görüntülenmesini arayabilirim

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şıyorum sorun ben bu Kadar ayar hala dizi üst düzey geri parçaları gezinmek yerine Navigasyon Çekmece orijinal resim. "En üst düzeyde ActionBar re-Navigasyon Çekmece görüntü? parçalar "yenileme konusunda herhangi bir öneriniz


Çözüm

Tom önerisi benim için çalıştı. Yaptığım şey şu:

MainActivity

Bu faaliyeti uygulama tüm parçaları kontrol eder.

Yeni parçalar Diğerleri değiştirmek için hazırlanırken, DrawerToggle böyle setDrawerIndicatorEnabled(false) I ayarlayın:

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();

Sonraki onBackPressed, geçersiz kılma, bu gibi setDrawerIndicatorEnabled(true) DrawerToggle ayarlayarak yukarıda döndü:

@Override
public void onBackPressed() {
    super.onBackPressed();
    // turn on the Navigation Drawer image; 
    // this is called in the LowerLevelFragments
    setDrawerIndicatorEnabled(true)
}

Bu LowerLevelFragments

Parçaları onCreate böyle onOptionsItemSelected ben değişiklik:

onCreate eklendi setHasOptionsMenu(true) seçenekler menüsünü yapılandırma etkinleştirmek için. Ayrıca setDisplayHomeAsUpEnabled(true) etkinleştirmek için ayarlayın<bu 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);
}

Daha sonra onOptionsItemSelected ne zaman<etkinliği onBackPressed() hiyerarşisinde bir düzey yukarı taşımak ve Navigasyon Çekmece Görüntüyü göstermek için çağırır basıldığında:

@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;
        … 
    }

CEVAP
13 Kasım 2013, ÇARŞAMBA


1-2-3 kadar kolay.

Eğer elde etmek istiyorsanız:

1)Çekmece Göstergesihayır parçaları Arkada olduğunda Yığın veya Çekmeceyi açtı

2)Okbazı Parçaları zaman - Geri Yığını

private FragmentManager.OnBackStackChangedListener
        mOnBackStackChangedListener = new FragmentManager.OnBackStackChangedListener() {
    @Override
    public void onBackStackChanged() {
        syncActionBarArrowState();
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    mDrawerToggle = new ActionBarDrawerToggle(
            this,             
            mDrawerLayout,  
            R.drawable.ic_navigation_drawer, 
            0, 
            0  
    ) {

        public void onDrawerClosed(View view) {
            syncActionBarArrowState();
        }

        public void onDrawerOpened(View drawerView) {
            mDrawerToggle.setDrawerIndicatorEnabled(true);
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);
    getSupportFragmentManager().addOnBackStackChangedListener(mOnBackStackChangedListener);
}

@Override
protected void onDestroy() {
    getSupportFragmentManager().removeOnBackStackChangedListener(mOnBackStackChangedListener);
    super.onDestroy();
}

private void syncActionBarArrowState() {
    int backStackEntryCount = 
        getSupportFragmentManager().getBackStackEntryCount();
    mDrawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}

3) Her İki gösterge hareket şekline göre

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.isDrawerIndicatorEnabled() && 
        mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    } else if (item.getItemId() == android.R.id.home && 
               getSupportFragmentManager().popBackStackImmediate()) {
        return true;
    } else {
        return super.onOptionsItemSelected(item);
    }
}

P. S. 3 satır gösterge davranış hakkında diğer ipuçları Creating a Navigation Drawer on Android Developers Bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • Krumme1996

    Krumme1996

    21 EYLÜL 2009
  • Vicious Computers

    Vicious Comp

    14 EKİM 2006