9

Standart gezinti çekmecesi vardı, ancak şimdi araç çubuğunu kullanarak değiştirmeye çalışıyorum. MainActivity.javaAndroid lolipop araç çubuğu açma/kapama düğmesi ve geri düğmesi arasında geçiş yapma

: benim kod modifiye Şimdi

public void setUp(int fragmentId, DrawerLayout drawerLayout) { 
    mFragmentContainerView = getActivity().findViewById(fragmentId); 
    mDrawerLayout = drawerLayout; 

    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

    ((MainActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    ((MainActivity) getActivity()).getSupportActionBar().setHomeButtonEnabled(true); 

    mDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, 
      ((MainActivity) getActivity()).getToolbar(), 
      R.string.navigation_drawer_open, 
      R.string.navigation_drawer_close) { 
     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
      if (!isAdded()) { 
       return; 
      } 

      getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      if (!isAdded()) { 
       return; 
      } 

      if (!mUserLearnedDrawer) { 
       // The user manually opened the drawer; store this flag to prevent auto-showing 
       // the navigation drawer automatically in the future. 
       mUserLearnedDrawer = true; 
       SharedPreferences sp = PreferenceManager 
         .getDefaultSharedPreferences(getActivity()); 
       sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply(); 
      } 
      if (mDrawerListView != null) { 

      } 
      getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() 
     } 

     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, slideOffset); 
     } 
    }; 

    // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer, 
    // per the navigation drawer design guidelines. 
    if (!mUserLearnedDrawer && !mFromSavedInstanceState) { 
     mDrawerLayout.openDrawer(mFragmentContainerView); 
    } 

    // Defer code dependent on restoration of previous instance state. 

    mDrawerToggle.setDrawerIndicatorEnabled(true); 

    mDrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mDrawerToggle.syncState(); 
     } 
    }); 

    mDrawerLayout.setDrawerListener(mDrawerToggle); 
} 

NavigationDrawerFragment.java MainActivity.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Log.v("MAIN", "CREATE"); 
    initViews(); 
    setListeners(); 

    getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { 
     @Override 
     public void onBackStackChanged() { 
      shouldDisplayHomeUp(); 
     } 
    }); 

    mNavigationDrawerFragment = (NavigationDrawerFragment) 
      getFragmentManager().findFragmentById(R.id.navigation_drawer); 
    mTitle = getTitle(); 

    // Set up the drawer. 
    mNavigationDrawerFragment.setUp(
      R.id.navigation_drawer, 
      (DrawerLayout) findViewById(R.id.drawer_layout)); 
} 

:

Daha önce benim kod benziyordu

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mToolbar = (Toolbar) findViewById(R.id.toolbar); 

    if (mToolbar != null) { 
     setSupportActionBar(mToolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

    initViews(); 
    setListeners(); 

    mNavigationDrawerFragment = (NavigationDrawerFragment) 
      getFragmentManager().findFragmentById(R.id.navigation_drawer); 
    mTitle = getTitle(); 

    // Set up the drawer. 
    mNavigationDrawerFragment.setUp(
      R.id.navigation_drawer, 
      (DrawerLayout) findViewById(R.id.drawer_layout)); 


    shouldDisplayHomeUp(); 

    getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() { 
     @Override 
     public void onBackStackChanged() { 
      mBackCount++; 
      shouldDisplayHomeUp(); 
     } 
    }); 
} 

NavigationDrawerFragment.java

public void setUp(int fragmentId, DrawerLayout drawerLayout) { 
    mFragmentContainerView = getActivity().findViewById(fragmentId); 
    mDrawerLayout = drawerLayout; 

    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

    mDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, 
      ((MainActivity) getActivity()).getToolbar(), 
      R.string.navigation_drawer_open, 
      R.string.navigation_drawer_close) { 
     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
      if (!isAdded()) { 
       return; 
      } 

      getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() 
     } 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      if (!isAdded()) { 
       return; 
      } 

      if (!mUserLearnedDrawer) { 
       // The user manually opened the drawer; store this flag to prevent auto-showing 
       // the navigation drawer automatically in the future. 
       mUserLearnedDrawer = true; 
       SharedPreferences sp = PreferenceManager 
         .getDefaultSharedPreferences(getActivity()); 
       sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply(); 
      } 
      if (mDrawerListView != null) { 

      } 
      getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu() 
     } 

     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, slideOffset); 
     } 
    }; 

    // If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer, 
    // per the navigation drawer design guidelines. 
    if (!mUserLearnedDrawer && !mFromSavedInstanceState) { 
     mDrawerLayout.openDrawer(mFragmentContainerView); 
    } 

    // Defer code dependent on restoration of previous instance state. 

    mDrawerToggle.setDrawerIndicatorEnabled(true); 

    mDrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mDrawerToggle.syncState(); 
     } 
    }); 

    mDrawerLayout.setDrawerListener(mDrawerToggle); 
} 

Ve shouldDisplayHomeUp fonksiyonu:

public void shouldDisplayHomeUp(){ 
    boolean canBack = getFragmentManager().getBackStackEntryCount() > 0; 
    mNavigationDrawerFragment.getDrawerToggle().setDrawerIndicatorEnabled(!canBack); 
} 

Ama geri ok

Ben çağrı çalıştı

gösterilmeyen

getSupportActionBar().setDisplayHomeAsUpEnabled(canBack); 
getSupportActionBar().setHomeButtonEnabled(canBack); 

Yani geri ok appers ama üzerine tıklayarak herhangi bir etki Dokümanlar

+0

Arka tarafınızda birden çok parçanız olduğunda arka oku değiştirmek ister misiniz? –

+0

Evet ve bunun yerine geri gezinme kutusunu sağlayın, – zagum

+0

numaralı araç çubuğunu açın, bu işlem mükemmel bir şekilde çalışıyor – zagum

cevap

21

sahiptir:

setDisplayHomeAsUpEnabled (çağrı, eylem çubuğundaki uygulama simgesinin navigasyon Yukarı izin vermek için):

Bu

@Override public void onCreate(Bundle savedInstanceState) { 
    ... 
    getActionBar().setDisplayHomeAsUpEnabled(true); } 
yanında solda bakan çıkıntı işareti ekler app simgesi ve bunu bir eylem düğmesi olarak etkinleştirir, böylece kullanıcı bunu bastığında, etkinliğiniz bir onOptionsItemSelected() çağrısı alır. Eylemin kimliği android.R.id.home'dir.

Bu onOptionsItemSelected sırtını rutin uygulanması ve R.id.home kontrol etmek zorunda olacağı anlamına gelir. Hamburger menüsüne tıkladığınızda rutini çağırmaktan kaçınmak için numaralı telefonu da onOptionsItemSelected numaralı telefondan kontrol edin.

http://developer.android.com/training/implementing-navigation/ancestral.html#up

DÜZENLEME

Eğer kendi navigasyon rutin uygulamak zorunda kalacak istediğini arşivleme için.

mToolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(shouldBack()) { 
       //call onbackpressed or something 
       if(displayBackAgain) 
        return; //return after so you don't call syncState();  
      }else if (mNavigationDrawerFragment.isDrawerOpen()) 
       mNavigationDrawerFragment.closeDrawer(); 
      else 
       mNavigationDrawerFragment.openDrawer(); 
      mNavigationDrawerFragment.getActionBarDrawerToggle().syncState(); 
     } 
    }); 
} 

sadece geri düğmesi ve nav kontrol etmek için bir yol bulmuş mNavigationDrawerFragment.getActionBarDrawerToggle().syncState();

+2

evet, ama bu, appcompat_v21 – zagum

+1

araç çubuğundan çalışmaz ve cevabı düzenledik –

+0

setNavigationOnClickListener tıklama etkinliklerini yakalamıyor – zagum

1

çağrı sadece devre dışı bırakmak için getSupportActionBar().setDisplayHomeAsUpEnabled(true); çağrı backbutton simgesini etkinleştirmek için. Benimle çalıştı. kurmak Öncelikle:

private void setupNav() { 

    this.toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(this.toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    this.mActionBarDrawerToggle = new ActionBarDrawerToggle(this, this.mDrawerLayout, this.toolbar, 0, 0); 

    this.mActionBarDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      //catch back button here. 
     } 
    }); 
    this.mDrawerLayout.setDrawerListener(this.mActionBarDrawerToggle); 
    this.mActionBarDrawerToggle.syncState(); 
} 

Önemli olan, bu şimdiye hamburger gizlemek ve geri düğmesine göstermek yoludur. Bu kodu geri gösterilmesini istediğiniz yere koymanız gerekir. Geri düğmesini gösterdiğimde de Nav'ı kilitliyorum.

if (!isShowBackButton) { 
     mActionBarDrawerToggle.setDrawerIndicatorEnabled(true); 
     mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
    } else { 

     mActionBarDrawerToggle.setDrawerIndicatorEnabled(false); 
     mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
     //enable back button 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
İlgili konular