2015-07-01 49 views
8

Tôi gặp sự cố với thanh công cụ và nút quay lại. Dưới đây là các thiết lập tôi có:chức năng nút quay lại thanh công cụ

enter image description here

Khi tôi thêm một đoạn cụ thể, tôi animate bánh hamburger thanh công cụ như đã nêu here. và điều này gây ra bánh hamburger để animate để một mũi tên.

Ngay cả trong phần ý kiến, một người dùng đề cập:

này hoạt động hoàn hảo. Chỉ cần đặt start = 0 và end = 1 để đi từ bánh hamburger đến mũi tên và bắt đầu = 1 và kết thúc = 0 cho mũi tên để bánh hamburger. Một điều bạn sẽ phải theo dõi là khi ngăn được đóng khi mũi tên được hiển thị. Tại thời điểm này, hamburger kết thúc được hiển thị (vì trang trình bày của ngăn kéo), mà bạn sẽ phải sửa.

Nhưng tôi không thể tìm ra cách để mũi tên quay lại hoạt động bình thường. Khi tôi nhấn mũi tên quay lại, ngăn kéo sẽ mở ra và đoạn chi tiết không bật. Làm thế nào tôi nên đi về việc thực hiện điều này?

Câu hỏi

  • Làm thế nào tôi nên động bánh hamburger để sao mũi tên khi thêm một mảnh chi tiết? giả sử giải pháp linked là không đủ tốt.
  • Làm cách nào để ghi đè mũi tên quay lại để chỉ thực hiện các chức năng cụ thể mà tôi muốn? như animate để hamburger, pop back stack và NOT mở ngăn kéo.
+0

thành thạo câu hỏi, 1 cho bạn bro –

Trả lời

2

Sau nhiều giờ tìm kiếm và chơi xung quanh, tôi đã có thể xây dựng một giải pháp mà giao vào từng yêu cầu. Nguồn: 1, 2

detailFragmentActive = false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setSupportActionBar(mToolbar); 
    ... 
    mToolbar.setNavigationOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if(detailFragmentActive) { 
         onBackPressed(); 
         //if(displayBackAgain) 
         //return; //return after so you don't call syncState(); 
        }else if (mDrawerLayou.isDrawerOpen(GravityCompat.START)) 
         mDrawerLayout.closeDrawer(GravityCompat.START); 
        else 
         mDrawerLayout.openDrawer(GravityCompat.START); 

        mDrawerToggle.syncState(); 
       } 
      }); 
} 

private void animateHamburger(boolean isArrow){ 
     int start = 0, end = 1; 

     if(isArrow){ 
      detailFragmentActive = false; 
      start = 1; end = 0; 
      mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
     }else{ 
      detailFragmentActive = true; 
      mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
     } 
     ValueAnimator anim = ValueAnimator.ofFloat(start, end); 
     anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
      @Override 
      public void onAnimationUpdate(ValueAnimator valueAnimator) { 
       float slideOffset = (Float) valueAnimator.getAnimatedValue(); 
       mDrawerToggle.onDrawerSlide(mDrawerLayout, slideOffset); 
      } 
     }); 
     anim.setInterpolator(new DecelerateInterpolator()); 
     anim.setDuration(500); 
     anim.start(); 
} 

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    animateHamburger(true); 
} 

public void onFragmentChange(){ 
    ... 
    animateHamburger(false); 
} 
+0

Điều này giải quyết hầu hết các vấn đề của tôi một cách hoàn hảo. Vẫn không thể đưa biểu tượng Hamburger hoạt ảnh đúng cách. – MidasLefko

0

Bạn có thể đặt người nghe cho nút này:

toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (flagDeterminingAction) { 
       drawerLayout.openDrawer(drawerListView); 
      } else { 
       onBackPressed(); 
       //or popbackstack or whatever you are using to going back in navigation 
      } 
     } 
+0

Cảm ơn bạn, đây là dọc theo dòng chính xác nhưng một số chi tiết tốt bị mất tích. Tôi đã có thể tìm thấy một giải pháp cuối cùng, xin vui lòng xem câu trả lời của tôi. – Android

Các vấn đề liên quan