2012-04-15 47 views
61

Tôi đã đọc tài liệu về Fragments trong Hướng dẫn dành cho nhà phát triển Android và tôi đã thấy rằng đôi khi chúng chỉ định lớp để khởi tạo thuộc tính thẻ Fragment android: name và đôi khi họ sử dụng lớp: thuộc tính:Bố cục hoạt động: Phân đoạn hoạt động: vs android: tên thuộc tính

<fragment 
    android:name="com.example.news.ArticleReaderFragment" 
    android:id="@+id/viewer" 
    android:layout_weight="2" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" /> 

<fragment 
    class="com.example.android.apis.app.FragmentLayout$TitlesFragment" 
    android:id="@+id/titles" 
    android:layout_weight="1" 
    android:layout_width="0px" 
    android:layout_height="match_parent" /> 

Are android: tênlớp: hoán đổi cho nhau? Nếu tôi sử dụng chức năng tự động hoàn thành trong Eclipse, cả hai đều hiển thị cùng một mẹo tài liệu (nghĩa là thuộc tính cung cấp tên lớp để được khởi tạo). Có thể bạn phải sử dụng thứ hai khi lớp được khởi tạo có tên khác với tên tệp java, như Nhan đềFragment có trong tệp FragmentLayout.java? Hoặc tôi có thể sử dụng cú pháp package.fileDOTjava $ Class cũng với thuộc tính android: : tên?

Tôi muốn có một số tài liệu về các thẻ và thuộc tính XML như cho Lớp Java Android (Tôi đã hỏi về nó trong một trang khác question).

Trả lời

23

Android: tên và lớp học: có thể hoán đổi cho nhau không?

Có lẽ, có. Tôi chỉ sử dụng class và dường như điều mà hầu hết các ví dụ của Google sử dụng, nhưng tôi thấy nơi họ sử dụng android:name trong một số mẫu. Thật không may, không có tài liệu chính thức và đầy đủ cho <fragment>.

+0

Tôi thực sự muốn có tài liệu. Vì 'lớp' không có vùng tên, tôi tò mò liệu thuộc tính đó không chỉ được sử dụng trong khi các đoạn đã được phát triển nhưng còn lại vì chúng không thể phá vỡ tính tương thích ngay bây giờ. Vì mục đích nhất quán, 'android: name' có vẻ hơi thích hợp hơn một chút và như user1550716 đã chỉ ra, chúng dường như có thể hoán đổi cho nhau. – spaaarky21

+0

@ spaaarky21: Vâng, tôi đã chuyển sang 'android: name' ở mọi nơi. – CommonsWare

+1

mức độ tin cậy bổ sung khi sử dụng tên so với lớp: IntelliJ IDEA sử dụng/tự động điền thuộc tính tên trong trình chỉnh sửa bố cục mới nhất (v13) – rmirabelle

39

Như Activity.onCreateView nguồn tin cho biết:

String fname = attrs.getAttributeValue(null, "class"); 
TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Fragment); 
if (fname == null) { 
    fname = a.getString(com.android.internal.R.styleable.Fragment_name); 
} 

Đó dường như có nghĩa là chương trình trông "class" thuộc tính đầu tiên. Và trên thất bại trông "tên" thuộc tính. Vì vậy, theo như nó là đúng bằng cách sử dụng "lớp" nếu hiệu quả hơn.

+1

Tôi vừa kiểm tra, mẫu cơ bản do Android Studio 2.0 cung cấp sử dụng thuộc tính 'name: xxx' theo mặc định. – yask

+0

"Thuộc tính android: name trong số chỉ định lớp Phân đoạn để khởi tạo trong bố cục". Đây là định nghĩa tôi thấy trong trang web của nhà phát triển. Trang: [link] (https://developer.android.com/guide/components/fragments.html). –

0

Xin lỗi tất cả các chuyên gia đang ở đây, tôi có thể sai nhưng theo kiến ​​thức android của tôi: tên thuộc tính của đoạn được sử dụng để tìm mảnh vỡ, khi chúng tôi sử dụng getFragmentByTag() phương pháp của lớp fragmentManager. cũng android: thuộc tính lớp được sử dụng để tìm lớp phân đoạn mà chúng tôi thường bao gồm cho đoạn tĩnh.

Hy vọng điều này sẽ giúp .. cảm ơn

+1

Theo [trang này] (http://developer.android.com/reference/android/app/Fragment.html), họ sử dụng thuộc tính 'android: tag' cho điều đó, điều này có ý nghĩa:' android: tag can được sử dụng trong để cung cấp tên thẻ cụ thể cho đoạn – user1978019

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