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?
10
A
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
- 1. Tại sao sử dụng DialogFragment?
- 2. Tại sao tôi không thể tạo một enum trong một lớp bên trong trong Java?
- 3. Tại sao một lớp bên trong tuần tự không thể tuần tự hóa được?
- 4. Tại sao tôi không thể sử dụng HttpServerUtility.HtmlEncode bên trong một lớp học?
- 5. Tại sao các toán tử không thể bị quá tải bên trong một lớp tĩnh?
- 6. Tại sao toBinaryString không phải là một phương thức thể hiện trong lớp Integer?
- 7. tại sao __getitem__ không thể là lớp học?
- 8. Tại sao String là một lớp học?
- 9. tại sao python tái sử dụng một thể hiện lớp bên trong trong hàm
- 10. Tại sao một Java enum không thể là cuối cùng?
- 11. Tại sao System.Array không thể là một ràng buộc kiểu?
- 12. Tại sao lớp của tôi không thể triển khai giao diện được khai báo bên trong?
- 13. Tại sao không thể bắt ngoại lệ bên trong?
- 14. Generics Java: tại sao giao diện bên trong không thể thực hiện từ một siêu bên trong (inner)?
- 15. Tại sao android.os.Bundle là một lớp học cuối cùng?
- 16. tại sao setName trong lớp Thread gán cho một mảng ký tự? Tại sao không phải là một String?
- 17. Tại sao nó không thể trong java để tham chiếu biến không cuối cùng trong lớp ẩn danh bên trong?
- 18. Tại sao tôi không thể sử dụng biến của lớp cha là lớp mẫu?
- 19. Tại sao một lớp cấp cao nhất có thể là tĩnh trong Java?
- 20. Tại sao một lớp học không thể được tải xuống mà không dỡ bộ nạp lớp?
- 21. Tại sao có thể đặt định nghĩa chức năng người bạn bên trong định nghĩa lớp?
- 22. Tại sao các lớp bên trong làm cho các phương thức riêng có thể truy cập?
- 23. Tại sao cuối cùng là lớp Chuỗi?
- 24. tại sao python inspect.isclass lại nghĩ một cá thể là một lớp?
- 25. Tại sao tôi không thể có một auto_ptr trong một lớp ngoại lệ
- 26. chặn DialogFragment sa thải bên trong hoạt động
- 27. Android DialogFragment onViewCreated không được gọi là
- 28. PHP: Làm thế nào $ có thể biến này bên trong một lớp là đối tượng của một lớp khác?
- 29. Tại sao một lớp giả được gọi là?
- 30. Tại sao kích thước của một lớp trống trong C++ không phải là 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
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
Có tôi có cùng một vấn đề với lớp ViewPager và Fragment. – WELLCZECH