2011-01-31 22 views
5

Tôi muốn sử dụng các mục cuộn theo chiều ngang trong một Listview cuộn dọc.Android: Làm cách nào để tôi có thể tạo các mục cuộn theo chiều ngang trong chế độ xem danh sách dọc?

Sự ngây thơ của tôi về điều này là đặt nội dung của các mục listview bên trong một scrollView. Các mục này rộng hơn chiều ngang so với scrollview, nhưng không cao hơn scrollview. Kể từ khi listview là một listview cuộn theo chiều dọc bình thường, tôi figured rằng kéo theo chiều dọc sẽ di chuyển trong danh sách, trong khi kéo theo chiều ngang sẽ di chuyển trong các mục.

Tuy nhiên điều đó không hiệu quả. Danh sách cuộn thẳng theo chiều dọc và hiển thị các mục chính xác, nhưng cuộn theo chiều ngang không hoạt động (không có gì xảy ra). Thật không may tôi thực sự không chắc chắn nơi để đi từ đây.

Lưu ý rằng các mục nên cuộn theo chiều ngang độc lập với các mục khác, tức là toàn bộ danh sách không được cuộn ngang khi kéo sang một bên.

Để tham khảo, tôi muốn danh sách hoạt động tương tự như danh sách trong ứng dụng 'Pulse', trong trường hợp bạn đã thấy nó.

Trả lời

3

Bạn cần sử dụng HorizontalScrollView. Droidstack là một ứng dụng mã nguồn mở (tôi đã viết) mà chỉ thực hiện điều này (trong danh sách câu hỏi bạn có thể cuộn các thẻ trên mỗi câu hỏi), nếu bạn muốn có một ví dụ cụ thể.

+0

Cảm ơn, tôi sẽ thử! –

+0

Làm điều đó, bạn mất chức năng bấm vào mục ListView. Nói cách khác, nhấp chuột vào nội dung cuộn được không được chuyển tiếp đến Listview. –

2

nếu bạn làm theo các thông lệ tốt về phát triển Android, bạn không bao giờ nên đặt một scrollview bên trong một ListView, là bu unrecomended Romain Guy và những người khác từ sự phát triển android, để đọc các đối số đọc ở đây: Android ScrollView layout problem

từ tài liệu android:

"Bạn không bao giờ nên sử dụng HorizontalScrollView với ListView, vì ListView sẽ tự động quan tâm đến việc cuộn của riêng nó. Quan trọng nhất là làm điều này sẽ đánh bại tất cả các tối ưu hóa quan trọng trong ListView để xử lý danh sách lớn. buộc ListView hiển thị toàn bộ danh sách các mục để lấp đầy vô hạn chứa er được cung cấp bởi HorizontalScrollView. "

CHỈNH SỬA: có vẻ như cảnh báo được đăng ở trên là lỗi từ tài liệu android, nói chuyện với một số đồng nghiệp mà họ đã nói với tôi về khả năng của nó. Vấn đề trong tài liệu là ở đây, http://code.google.com/p/android/issues/detail?id=2781.

xin lỗi của tôi

+0

Ok, nhưng thay thế là gì? –

+0

Tôi nói chuyện với một số đồng nghiệp và nói với tôi về vấn đề trong Tài liệu Android, tôi đã chỉnh sửa bài đăng, ứng dụng của mình – Franco

+0

Tôi nghĩ rằng trích dẫn cố gắng nói rằng bạn không nên đặt 'ListView' bên trong' ScrollView', không phải cách khác xung quanh, mà nên được tốt. – Felix

0

Bạn có thể sử dụng "ViewPager" mỗi phần tử trong danh sách có thể là một ViewPager

6

Hãy thường ListView với bất kỳ adapter bạn thích nhưng thiết kế một cái gì đó mục Layout như thế này:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

    <HorizontalScrollView 
     android:id="@+id/hor_scroll" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:id="@+id/lin" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"> 

      <ImageView 
       android:id="@+id/icon" 
       android:layout_width="wrap_content" 
       android:layout_height="fill_parent" 
       android:layout_marginRight="6.0dip" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentBottom="true" 
       android:focusable="false" /> 

      <TextView 
       android:textAppearance="?android:textAppearanceMedium" 
       android:gravity="center_vertical" 
       android:id="@+id/text" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:singleLine="true" 
       android:layout_toRightOf="@id/icon" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentBottom="true" /> 

     </LinearLayout> 

    </HorizontalScrollView> 


</RelativeLayout> 

Bạn sẽ có chiều dọc Scrollable ListView với chiều ngang Scrollable mục. Và các mục được cuộn độc lập từ các mục khác.

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