2012-02-01 22 views
7

Câu hỏi đầu tiên về Stack Overflow, xin lỗi nếu nó không được định dạng tốt.Android - cách tạo ứng dụng tab phức tạp với chế độ xem

Tôi đang phát triển một ứng dụng tab tương đối phức tạp và đã thiết lập cơ sở trước khi đi qua thông tin mà ActivityGroup và TabActivity không được dùng nữa và mô hình ưa thích là sử dụng chế độ xem.

Tôi không gặp khó khăn khi sử dụng chế độ xem, đây là câu hỏi về kiến ​​trúc chứ không phải cú pháp (đó là lý do tôi chưa đăng bất kỳ mã nào). Cụ thể, tôi nên làm cách nào để chuyển đổi cấu trúc ứng dụng để sử dụng chế độ xem thay vì Intent đã khởi chạy Hoạt động.

Ứng dụng có năm tab; hai giữ một bố trí duy nhất, không có vấn đề ở đó. Ba tab khác đang chạy ActivityGroup với 2-5 Hoạt động khác nhau (tức là một tab chạy hoạt động cho cài đặt, trong đó nhấp vào mỗi chế độ xem sẽ bắt đầu một Hoạt động mới xử lý cài đặt cụ thể đó, nhấn nút quay lại sẽ đưa bạn trở lại hoạt động cài đặt/chế độ xem rộng hơn). Nếu tôi giữ mỗi Tab là một TabActivity, nó vẫn sẽ khá dễ dàng để thay đổi các chuyển đổi nội bộ đó thành các quan điểm trái ngược với các Hoạt động riêng biệt.

Câu hỏi chính là sử dụng chế độ xem CHỈ, không có nhóm Hoạt động TabActivity/Hoạt động nào cả. Phần lớn các nghiên cứu tôi đã thực hiện đã được thảo luận về việc có nên sử dụng các hoạt động hoặc khung nhìn hay về cú pháp cụ thể. Tôi đã không thể thu thập một ý tưởng rõ ràng về làm thế nào để thực sự làm cho quá trình chuyển đổi sang quan điểm trên toàn bộ ứng dụng.

  1. Nếu tôi làm như vậy, không phải toàn bộ ứng dụng hiện đang chạy trong một Hoạt động - ứng dụng có lưu trữ bố cục theo tab không?

  2. Nếu (1) là đúng, cách quản lý? Mặc dù ActivityGroup không được chấp nhận, tất cả tài liệu Android dường như vẫn tuyên bố rằng nó được ưu tiên sử dụng các Hoạt động riêng biệt cho các khía cạnh chức năng riêng biệt - điều này có ý nghĩa. Nhóm phát triển Android có đơn giản quyết định rằng chi phí cho ngăn xếp và thiết bị đã thực hiện triển khai TabActivity không hiệu quả không?

  3. Nếu ứng dụng đang chạy trong một Hoạt động quản lý các chế độ xem khác nhau cho mỗi tab (và sau đó là các chế độ xem khác nhau TRONG một tab khi cần), tôi có một phương thức onClick rất lớn để xử lý tất cả các nhấp chuột từ bất kỳ chế độ xem có thể nhấp nào, xử lý đầu vào dựa trên chế độ xem nào đang hoạt động? Hoặc tôi có nên đăng ký và hủy đăng ký tất cả những người nghe của tôi theo chương trình không?

  4. Với một Hoạt động đơn lẻ, sẽ không có trình nghe nhấp chuột nào hoặc bất kỳ thiết bị phát sóng nào đang chạy tất cả thời gian, tiêu thụ tài nguyên ngay cả khi không cần thiết?

  5. Với một Hoạt động, nút quay lại sẽ thoát khỏi toàn bộ ứng dụng từ bất kỳ điểm nào trong chức năng của nó. Nếu tôi đang sử dụng chế độ xem, tôi có phải luôn ghi đè lên BackPressed() và quản lý cẩn thận hành vi ứng dụng để buộc ứng dụng đó hoạt động như một ứng dụng Android không? "

  6. TÔI CÓ NGHIÊN CỨU VỀ BÀI VIẾT HOÀN THÀNH NÀY KHÔNG? Có thể là tôi vô tình cố gắng tạo lại chức năng ActivityGroup và TabActivity bằng cách sử dụng chế độ xem thay vào đó, khi tôi nên sử dụng phương pháp thiết kế hoàn toàn khác để sử dụng tab và Chế độ xem.

Khi mọi người ở Google nói rằng chúng tôi không nên sử dụng các hoạt động dưới dạng tab nữa, và ông Mark Murphy rất đồng ý, tôi có xu hướng tin tưởng.Tôi chỉ đơn giản là đã không thể nghiên cứu một cách để chuyển đổi mà không cần phải tái tạo rất nhiều chức năng hoạt động bằng tay (mà có lẽ sẽ bao gồm một loạt các hacks bẩn).

Đánh giá cao trước cho bất kỳ ai sẵn sàng giải quyết một chủ đề mơ hồ và bị ghi đè.

+1

thực sự câu hỏi tuyệt vời ... chào mừng bạn đến với Stack. –

Trả lời

2

Sử dụng Fragments là tiêu chuẩn mới để thực hiện các thành phần ui kiểu tab, tôi nghĩ bạn phải bỏ qua chúng vì chúng là phần thiếu cho tất cả các câu hỏi trên của bạn. Chúc may mắn.

Đừng quên rằng việc sử dụng thư viện khả năng tương thích sẽ đưa hỗ trợ Fragment trở lại 1.6.

here là một hướng dẫn được Google đề xuất dễ dàng về cách sử dụng Phân đoạn trong một TabHost.

+0

Bạn nói đúng, tôi CÓ những mảnh hoàn toàn bị bỏ qua. Rất hữu ích, cảm ơn bạn. – HeMightBeTodd

+0

@HendlerExploit, nếu tôi hiểu tài liệu phân đoạn chính xác, chúng tôi không muốn sử dụng các Hoạt động riêng biệt cho mỗi tab, nhưng * IS * được coi là thiết kế tốt để sử dụng các đoạn riêng biệt cho từng thành phần chức năng riêng biệt? – HeMightBeTodd

+0

Đúng, các mảnh vỡ có thể được coi là một nhóm logic lõi. Không giống như một Activity nhưng với Fragments bạn có thể giới hạn sự sao chép mã bằng cách tái sử dụng cùng một Fragments ở những nơi khác nhau. – HandlerExploit

1

Giới thiệu 3) Tách ứng dụng của bạn trong nhiều Hoạt động khi bạn có các phần khác nhau của ứng dụng. Hôm nay tôi thậm chí còn đi cho Fragements có thể dễ dàng hơn được tạo thành các bố cục khác nhau khi bạn, ví dụ: tạo ứng dụng cho Điện thoại và máy tính bảng. Hầu hết thời gian, bạn chỉ có thể thiết lập các onClick thính giả trong các tập tin định nghĩa layout xml tương ứng như thế này:

<ImageButton 
    android:id="@+id/new_tweet_back_button" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_gravity="left" 
    android:onClick="done" 
    android:src="@drawable/back_button" 
    android:layout_below="@id/CharCount" 
     /> 

Ở đây điểm thuộc tính đến một phương pháp mà thực hiện xử lý. Bạn không cần phải hủy đăng ký bất kỳ thứ gì.

Và thay vì Tabs tôi muốn đi cho ViewPager mà làm imo một kinh nghiệm nhiều tự nhiên hơn với chỉ trao đổi quan điểm bằng cách vuốt sang trái và phải (xem ví dụ G + ứng dụng hoặc ứng dụng thị trường)

+0

Tôi cho rằng tôi đã bỏ điều này ra khỏi câu hỏi ban đầu - phần lớn việc xử lý nhấp chuột của tôi được thực hiện thông qua các phương thức được khai báo thông qua android: onClick trong bố cục xml. Trong trường hợp này, những người nghe chỉ hoạt động khi các tập tin có liên quan đã được gọi với setContent() hoặc setContentView(), như vậy mà tôi không cần phải lo lắng khác? – HeMightBeTodd

+0

Có - và cũng có thể sử dụng một phương thức cho nhiều phần tử giao diện người dùng - bạn nhận được 'chế độ xem cuộc gọi' được truyền vào làm đối số. –

+0

Trong đó, nếu tôi khai báo android: onClick = "myClickHandler" trên nhiều chế độ xem, cùng một myClickHandler (Xem v) sẽ được gọi bởi tất cả chúng, chuyển sang chế độ xem thích hợp? – HeMightBeTodd

0

Như một câu trả lời cuối cùng để câu hỏi của riêng tôi:

Sử dụng các đoạn trong tab DID giải quyết tất cả vấn đề trên.

Vì vậy, thay vì một Hoạt động xác định các tab có chứa Hoạt động khác, tôi có một FragmentActivity lớn để thiết lập và chuyển chế độ xem của các đoạn khác nhau. Các phương thức bấm được định nghĩa trong XML cho mỗi lần xem tab thuộc về FragmentActivity và tôi đã chọn để onClick gọi một phương thức tương ứng trong đoạn thích hợp (chuyển ngữ cảnh nếu cần) để mã điều khiển từng khung nhìn theo chương trình có thể ở trong lớp thích hợp.

ĐÂY LÀ CHO ĐIỆN THOẠI SỬ DỤNG GÓI TƯƠNG THÍCH, không phải là máy tính bảng hoặc Honeycomb, vì vậy tôi không thể nói cho những người không may.

Giải pháp này dường như đã hoạt động tốt đối với tôi. Tôi khuyên bạn nên bất cứ ai nhìn vào cùng một vấn đề kiểm tra:

thepsuedocoder bài viết trên blog: http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/

tài liệu Android trên mảnh vỡ: http://developer.android.com/guide/topics/fundamentals/fragments.html

Bản demo API "Fragment Tabs" http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment

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