2015-11-29 20 views
6

Tôi có một nút hành động thả nổi (FAB) và một Tác vụ Async gọi FAB.hide() trước khi tải một số dữ liệu ở chế độ nền và FAB.show() sau khi hoàn tất. Vì lý do nào đó, mặc dù nhật ký console của tôi hiển thị rõ ràng một cuộc gọi luôn được thực hiện để ẩn() và sau đó hiển thị(), đôi khi FAB ẩn nhưng không hiển thị cho đến khi nhiệm vụ được thực thi lại.android floating action button show() không hoạt động

CẬP NHẬT

Vấn đề dường như xảy ra nếu cuộc gọi là quá gần. Tôi thực sự đã thử mã:

fab.hide(); 
fab.show(); 

và cùng một vấn đề xảy ra (fab không hiển thị). Bất kỳ ý tưởng nào để xử lý việc này?

Trả lời

11

CẬP NHẬT: Là noted on the Issue Tracker, sự cố này đã được khắc phục như phiên bản 24.2.0 của thư viện hỗ trợ.


Tôi gặp phải tình huống tương tự. Vấn đề có vẻ là nút hành động nổi không tự coi là hiển thị hoặc ẩn cho đến khi hiển thị/ẩn hoạt ảnh là hoàn thành.

Vì vậy, nếu bạn gọi hide(); nhưng sau đó gọi show(); trước khi hoạt ảnh ẩn hoàn tất, khi đó hoạt ảnh hiển thị sẽ không chạy vì nút vẫn được đặt ở trạng thái đã hiển thị.

Tôi không biết nếu điều này là giải pháp tối ưu nhưng tôi giải quyết nó như sau:

boolean fabShouldBeShown; 
FloatingActionButton.OnVisibilityChangedListener fabListener = new FloatingActionButton.OnVisibilityChangedListener() { 
    @Override 
    public void onShown(FloatingActionButton fab) { 
     super.onShown(fab); 
     if(!fabShouldBeShown){ 
      fab.hide(); 
     } 
    } 

    @Override 
    public void onHidden(FloatingActionButton fab) { 
     super.onHidden(fab); 
     if(fabShouldBeShown){ 
      fab.show(); 
     } 
    } 
}; 

public void methodWhereFabIsHidden() { 
    fabShouldBeShown = false; 
    myFab.hide(fabListener); 
} 

public void methodWhereFabIsShown() { 
    fabShouldBeShown = true; 
    myFab.show(fabListener); 
} 

Bằng cách đặt boolean của chúng ta cùng với người nghe này, chúng ta có thể đối phó với những tình huống gián đoạn. Khi chúng tôi đến cuối phim hoạt hình, chúng tôi kiểm tra xem liệu chúng tôi có ở trong trạng thái mà chúng tôi thực sự muốn không, và nếu chúng tôi không thay đổi đúng.

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