Ứng dụng Android mà tôi hiện đang phát triển có một hoạt động chính đã phát triển khá lớn. Điều này chủ yếu là vì nó chứa một TabWidget
với 3 tab. Mỗi tab có khá nhiều thành phần. Hoạt động này phải kiểm soát tất cả các thành phần đó cùng một lúc. Vì vậy, tôi nghĩ bạn có thể tưởng tượng rằng Hoạt động này có 20 trường (một trường cho hầu hết mọi thành phần). Ngoài ra nó có chứa rất nhiều logic (click listeners, logic để điền vào danh sách, vv).Android - Viết một thành phần tùy chỉnh (hợp chất)
Những gì tôi thường làm trong khung thành phần dựa trên là chia mọi thứ thành các thành phần tùy chỉnh. Mỗi thành phần tùy chỉnh sau đó sẽ có trách nhiệm rõ ràng. Nó sẽ chứa tập hợp các thành phần riêng của nó và tất cả các logic khác liên quan đến thành phần đó.
Tôi đã cố gắng tìm hiểu cách thực hiện điều này và tôi đã tìm thấy nội dung nào đó trong tài liệu Android mà họ muốn gọi là "Kiểm soát hợp chất". (Xem http://developer.android.com/guide/topics/ui/custom-components.html#compound và cuộn đến phần "Điều khiển Hợp chất") Tôi muốn tạo một thành phần như vậy dựa trên một tệp XML xác định cấu trúc khung nhìn.
Trong tài liệu hướng dẫn nó nói:
Lưu ý rằng giống như với một hoạt động, bạn có thể sử dụng một trong hai cách tiếp cận (dựa trên XML) khai báo để tạo ra chứa các thành phần, hoặc bạn có thể làm tổ chúng lập trình từ mã của bạn.
Vâng, đó là tin tốt! Cách tiếp cận dựa trên XML là chính xác những gì tôi muốn! Nhưng nó không nói làm thế nào để làm điều đó, ngoại trừ rằng nó là "giống như với một hoạt động" ... Nhưng những gì tôi làm trong một hoạt động được gọi setContentView(...)
để thổi phồng các quan điểm từ XML. Phương thức đó không có sẵn nếu bạn ví dụ lớp con LinearLayout
.
Vì vậy, tôi đã cố gắng để thổi phồng XML bằng tay như thế này:
public class MyCompoundComponent extends LinearLayout {
public MyCompoundComponent(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_layout, this);
}
}
này hoạt động, ngoại trừ một thực tế rằng XML Tôi tải có LinearLayout
khai báo là phần tử gốc. Điều này dẫn đến con số LinearLayout
tăng cao là con của MyCompoundComponent
mà chính nó đã là LinearLayout
!! Vì vậy, bây giờ chúng ta có một LinearLayout dư thừa ở giữa MyCompoundComponent
và các khung nhìn mà nó thực sự cần.
Ai đó có thể vui lòng cung cấp cho tôi một cách tốt hơn để tiếp cận điều này, tránh việc có một số dư thừa LinearLayout
được khởi tạo không?
Tôi yêu các câu hỏi mà tôi học được điều gì đó từ đó. Cảm ơn. –
Gần đây tôi đã viết một bài viết blog về điều này: http://blog.jteam.nl/2009/10/08/exploring-the-world-of-android-part-3/ –