2013-05-08 37 views
9

Tôi đã viết chế độ xem tùy chỉnh trong Android. Tôi cần thực hiện một số xử lý khi chế độ hiển thị của chế độ xem này được thay đổi. Có một số người nghe được gọi khi khả năng hiển thị của chế độ xem/tiện ích được thay đổi không?Cách xử lý các thay đổi hiển thị cho chế độ xem/widget tùy chỉnh android

Edit:

tôi biết làm thế nào để thay đổi tầm nhìn, muốn biết nếu có một người biết lắng nghe mà được gọi là khi chúng ta setVisibility trên xem!

+0

Giải thích hơn một chút, xin vui lòng – cgalvao1993

Trả lời

16

Bạn có muốn thực hiện việc xử lý đó trong lớp chế độ xem tùy chỉnh của mình không? Nếu vậy, thì tại sao không chỉ ghi đè phương thức setVisibility(), gọi super(), và sau đó thực hiện xử lý tùy chỉnh của bạn?

+0

đánh dấu điều này là câu trả lời vì giải pháp này đã được cung cấp trước khi giải thích chi tiết của blackbelt – JeeZ

+2

nó không hoạt động theo cách này. Ví dụ: nếu bạn đặt bố cục của chế độ xem là ẩn mặt, thuộc tính hiển thị của chế độ xem đó vẫn có thể hiển thị. Chỉ cần thực hành điều này và bạn sẽ thấy nó là sự thật. – Jacky

0

Để thay đổi chế độ hiển thị của tiện ích, hãy sử dụng phương thức widget.setVisibility(View.Visible) hoặc widget.setVisibility(View.Invisible).

+0

tôi biết làm thế nào để thay đổi tầm nhìn, muốn biết nếu có một người biết lắng nghe mà được gọi là khi chúng ta setVisibility trên xem! – JeeZ

15

Tôi biết cách thay đổi chế độ hiển thị, muốn biết nếu có một người nghe được gọi khi chúng tôi đặt Khả năng hiển thị trên chế độ xem!

bạn phải phân loại view/widget và ghi đè setVisibility và đăng ký giao diện mà bạn sẽ lưu lại thông báo. Ví dụ:

public class MyView extends View { 

    public interface MyListener { 
    public void onSetVisibilityCalled(); 
    } 

    public void registerListener(MyListener myListener) { 
    this.mListener = myListener; 
    } 

public void setVisibility (int visibility) { 
    super.setVisibility(visibility); 
    if (mListener != null) 
    mListener.onSetVisibilityCalled(); 
} 

} 
8

Bạn phải phân lớp chế độ xem bạn muốn thêm người nghe vào. Sau đó, bạn nên ghi đè onVisibilityChanged thay vì setVisibility. onVisibilityChanged được kích hoạt khi chế độ hiển thị của chế độ xem bị thay đổi vì bất kỳ lý do nào, kể cả khi chế độ xem tổ tiên đã được thay đổi.

Bạn sẽ cần một giao diện nếu bạn muốn một lớp khác được thông báo khi thay đổi mức độ hiển thị của View.

Ví dụ:

public class MyView extends View { 
    private OnVisibilityChangedListener mVisibilityListener; 

    public interface OnVisibilityChangedListener { 
    // Avoid "onVisibilityChanged" name because it's a View method 
    public void visibilityChanged(int visibility); 
    } 

    public void setVisibilityListener(OnVisibilityChangedListener listener) { 
    this.mVisibilityListener = listener; 
    } 

protected void onVisibilityChanged (View view, int visibility) { 
    super.onVisibilityChanged(view, visibility); 

    // if view == this then this view was directly changed. 
    // Otherwise, it was an ancestor that was changed. 

    // Notify external listener 
    if (mVisibilityListener != null) 
    mVisibilityListener.visibilityChanged(visibility); 

    // Now we can do some things of our own down here 
    // ... 
} 
} 
Các vấn đề liên quan