2012-03-06 26 views
12

Gần đây tôi đã thêm Phân đoạn vào các ứng dụng của mình. Đối với một ứng dụng mới, tôi sẽ cần nhận được thông báo ngay sau khi đoạn của tôi được hiển thị. Vì vậy, tôi có thể thực hiện một số tính toán ngay khi đoạn của tôi được hiển thị lại.Fragment onHiddenChanged không được gọi là

Phân đoạn của tôi được sử dụng với một TabIndicator và nó chỉ là một FragmentClass được sử dụng một vài lần.

Dưới đây là tiêu chuẩn bình thường lớp override:

@Override 
public void onHiddenChanged(boolean hidden) { 
    super.onHiddenChanged(hidden); 
} 

Trả lời

6

Vẫn đang tìm kiếm một câu trả lời? onHiddenChanged không được gọi là lần đầu tiên một đoạn được hiển thị. Chỉ khi nó thay đổi trạng thái.

Từ các tài liệu:

gọi khi trạng thái ẩn (như trả về bởi Được ẩn()) của đoạn đã thay đổi. Các mảnh vỡ bắt đầu không bị ẩn; điều này sẽ được gọi bất cứ khi nào các mảnh thay đổi trạng thái từ đó.

+0

Cảm ơn câu trả lời nhưng phương pháp này không được gọi bao giờ hết. Vì vậy, tôi đã giải quyết nó do thực tế là người xem của tôi có một người nghe. Trong người nghe này tôi gọi phương thức onHidden-Changed. Stupid nhưng yeah, nó hoạt động ngay bây giờ. – mikepenz

+0

Nó chưa bao giờ được gọi. –

9

Tôi gặp vấn đề tương tự.

Tôi đã sử dụng hướng dẫn nổi bật thực hành với đoạn (Building a Flexible UI). Tôi có hai mảnh (ListItemsFragment và InfoItemFragment). Khi sử dụng kích thước màn hình bình thường, tôi thay thế ListItemsFragment tại InfoItemFragment và phương thức onHiddenChanged không gọi tự động.

FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction(); 
mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem"); 
mFragmentTransaction.addToBackStack(null); 
mFragmentTransaction.commit(); 

Tôi nghĩ rằng chúng ta phải gọi là để che dấu lại phương pháp FragmentTransaction. Ví dụ:

ListItemsFragment mListItemsFragment; 
    FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction(); 
    mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem"); 
    if (mListItemsFragment != null) { 
     mFragmentTransaction.hide(mListItemsFragment); 
    } 
    mFragmentTransaction.addToBackStack(null); 
    mFragmentTransaction.commit(); 

Và bây giờ phương thức onHiddenChanged hoạt động tốt. Khi người dùng nhấp vào nút quay lại mListItemsFragment một lần nữa hiển thị và phương thức onHiddenChanged được gọi là tự động.

Trong tài liệu hướng dẫn cho biết: này sẽ được gọi bất cứ khi nào đoạn thay đổi trạng thái từ đó

Tôi nghĩ rằng chúng ta phải thủ công giá trị thay đổi thì phương pháp sẽ được gọi.

0

Bạn có thể sử dụng phương thức setUserVisibleHint để giải quyết một số vấn đề tương tự. Hy vọng nó có thể giúp bạn.

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     // Do some your work 
    } else { 
     // Do your Work 
    } 
} 
Các vấn đề liên quan