2012-07-19 36 views
10

Nếu tôi có DialogFragment tôi khai báo là một bên trong lớp Tôi có một InstantiationException trên orientation change, tức là khi dụ được tái tạo, trong đó nói rằng không có nhà xây dựng cộng đồng, lớp không phải là, vv công Trong thực tế tất cả mọi thứ được public, constructor mặc định được đặt ra. Nếu tôi chỉ di chuyển DialogFragment này sang một tệp riêng biệt - mọi thứ đều ổn. Tôi không tìm cách giải quyết, tôi chỉ muốn hiểu tại sao điều này lại xảy ra.Tại sao DialogFragment không thể là một lớp bên trong?

+0

Tôi không hoàn toàn chắc chắn, nhưng tôi nghĩ 'DialogFragment's, nếu trong một lớp, phải là' tĩnh'. Thật không may, tôi không có bất kỳ trích dẫn nào cho điều này, chỉ là mọi ví dụ làm việc mà tôi đã thấy đều sử dụng thực thi 'static'. Từ ý chính của bài viết của bạn ngày hôm qua, tôi nhận được rằng đây không phải là một giải pháp khả thi, nhưng tôi tin rằng đây là trường hợp. Có lẽ ai đó khác có thể làm sáng tỏ điều này ... – Eric

+0

Cảm ơn, Eric. Tôi chỉ muốn hiểu những gì đang xảy ra đằng sau hậu trường, tại sao điều này xảy ra. – Eugene

+0

Có tôi có cùng một vấn đề với lớp ViewPager và Fragment. – WELLCZECH

Trả lời

8

Điều này có vẻ là một hạn chế trong Java dựa trên cách Fragments được tạo và tạo lại.

Dường như tất cả Fragment s phải được reinstantiated trong một số tình huống [1], chẳng hạn như thay đổi định hướng (và tôi sẽ đoán khi khởi tạo, tùy thuộc vào cách Fragment được tạo ra). Điều này có nghĩa là nó sẽ được phục hồi từ bên ngoài lớp học bên ngoài của bạn. Tuy nhiên, một lớp bên trong không phải là static không thể được khởi tạo từ bên ngoài lớp bên ngoài. [2] Ngoài ra còn có các trường hợp khác, trong đó cần Fragment giao tiếp với bên ngoài lớp học. [3]

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