2013-02-11 63 views
21

Tôi có số Fragment có số FrameLayout. Đoạn đầu tiên này (A) tải bên trong phần Framelayout của nó (B). Khi tôi gọi getParentFragment từ đoạn bên trong (B), tôi nhận được null. Phương pháp này nên được sử dụng đúng cách như thế nào?getParentFragment trả lại số không

Trả lời

37

getParentFragment() đã được giới thiệu ở cấp API 17 (Android 4.2). Android 4.2 đã giới thiệu ý tưởng về các đoạn lồng nhau (các đoạn có chứa các đoạn khác). Gọi kết quả này là null nếu đoạn có một parent là Activity.

Hãy xem this.

Nếu bạn đang sử dụng thư viện hỗ trợ thì bạn có thể sử dụng getParent(), có thể bạn cần sử dụng getChildFragmentManager() trong khi thực hiện giao dịch phân đoạn. Xem this

+4

Cảm ơn bạn! Thay vào đó, tôi đã sử dụng setTargetFragment. Tôi biết nó không có nghĩa là cho mục đích này, nhưng thực hiện công việc. – Gonzalo

+2

Nó đã được giới thiệu trong 4.2 nhưng có thể được sử dụng trong phiên bản cũ hơn bằng cách sử dụng thư viện hỗ trợ –

+0

tại sao findFragmentByTag không hoạt động bên trong phân đoạn con (tức là lồng nhau) ' –

25

Trong trường hợp của tôi, mặc dù phân đoạn của tôi được lồng trong đoạnB, nhưng tôi vẫn nhận được null sau khi gọi getParentFragment trong FragmentA. Cuối cùng tôi thấy rằng tôi nên sử dụng getChildFragmentManager hơn là getFragmentManager trong FragmentB.

việc kiểm tra này What is difference between getSupportFragmentManager() and getChildFragmentManager()?

+2

Cũng lưu ý rằng [mảnh vỡ lồng nhau] (http://developer.android.com /about/versions/android-4.2.html#NestedFragments) có giới hạn mà bạn không thể thổi phồng bố cục vào một 'Phân đoạn' khi bố cục đó bao gồm thẻ . Nested 'Fragments' chỉ được hỗ trợ khi được thêm vào' Fragment' động thông qua 'getChildFragmentManager()'. – jenzz

1

Một trong những điều đó đã giúp là, khi tạo bộ chuyển đổi sử dụng getChildFragmentManager().

Nếu bạn không sử dụng bộ điều hợp, chỉ cần sử dụng getChildFragmentManager() khi thực hiện giao dịch.

setTargetFragment() không được khuyến khích, vì nó mang lại cho lỗi trên moveState() của đoạn (vì mảnh nên được gắn với FragmentManager)

3

tôi phải đối mặt với cùng một vấn đề, và khắc phục vấn đề bằng cách lưu trữ đoạn thứ hai trong đoạn cha mẹ của bạn với getChildFragmentManager() sau đó bạn sẽ không thể nhận được các giá trị null ...

mảnh Chánh

SignUpFragment signUpFragment = new SignUpFragment(); 
    getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.contentPanel, signUpFragment) 
      .addToBackStack(null).commit(); 

mảnh trẻ em: những gì tôi đã sử dụng là một hộp thoại

HospitalCardDialog hospitalCardDialog = new HospitalCardDialog(); 
    hospitalCardDialog.show(getChildFragmentManager(), "");