2011-06-22 60 views
9

Ok Tôi đang thiết kế một ứng dụng có bố cục rất đơn giản gồm 62 Màn hình nội dung, được truy cập thông qua 27 Màn hình trình đơn. Tổng cộng có 89 hoạt động.Trong Android, mỗi màn hình sẽ là Hoạt động hoặc bố cục riêng của mình?

Hiện tại, tôi có mỗi Màn hình nội dung là Hoạt động chỉ cần gọi bố cục XML (một số văn bản, nút và hình ảnh) và thêm một số chức năng onClick.

Mỗi màn hình trình đơn là một ListActivity và nhấn từng mục trong danh sách sẽ mở Hoạt động của mục đó (có thể là một Màn hình trình đơn khác hoặc màn hình nội dung).

Hiện tại tôi đang thử nghiệm với 3 Màn hình trình đơn và màn hình nội dung. Nó là tốt di chuyển qua tất cả, tuy nhiên tôi lo ngại rằng khi tôi hoàn thành các ứng dụng nó sẽ có quá nhiều hoạt động và làm cho các ứng dụng chậm và slugish. Trong một sử dụng trung bình của các ứng dụng tôi tưởng tượng người dùng sẽ sử dụng không quá 10 hoạt động nhưng tôi không chắc chắn nếu Android sẽ được dự đoán tạo ra các hoạt động không sử dụng khác hoặc những gì. Vì vậy, một cách khác để thực hiện điều này sẽ là chỉ có một vài hoạt động (có thể 1 cho một MainMenu, 1 cho một subMenu và 1 cho một ContentScreen) mà chỉ cần làm việc ra bố cục để hiển thị. Tuy nhiên, tôi cảm thấy điều này có nghĩa là mỗi Hoạt động có nhiều việc phải làm hơn và tôi cũng mất chức năng nhấn nút Quay lại để người dùng sao lưu thông qua hệ thống phân cấp menu (và mã hóa nút Quay lại thay thế trên mỗi Màn hình. liên quan đến một trường hợp lớn cho onClick liên quan đến tất cả các bố cục có thể, tất cả 89 trong số đó!).

Cách tốt nhất để sử dụng ứng dụng này là gì?

Bất kỳ trợ giúp nào được đánh giá rất nhiều

+1

không ứng dụng của bạn làm gì? Đó là một lotttt của màn hình nội dung. – Matt

+0

Đây là một ứng dụng hướng dẫn du lịch, do đó có một trang nội dung cho khách sạn, nhà hàng, điểm tham quan, v.v ... – Stu

Trả lời

2

Trừ khi bố cục và hành vi khác nhau đáng kể giữa các hoạt động menu và hoạt động nội dung, tôi sẽ đi với "chỉ một vài phương pháp tiếp cận hoạt động".

Nút quay lại sẽ không bị hỏng, Android sẽ theo dõi tình trạng tồn đọng của bạn.

Bạn có thực sự cần 89 bố cục khác nhau không? Nếu chủ yếu là nội dung khác nhau giữa chúng, lưu trữ nội dung trong cơ sở dữ liệu hoặc tệp hoặc trong /res/, sử dụng lại bố cục và điền vào các khu vực nội dung bố cục khi chạy.


Cập nhật:

Nó sẽ không thể dễ dàng nhất để có 1 hoạt động trên trang nội dung trong onCreate() điền vào cách bố trí với các nội dung thích hợp?

Phụ thuộc vào mức độ khác nhau của mã onCreate() của bạn. Nếu số onCreate() của bạn sẽ là số switch khổng lồ với 62 mệnh đề case cực kỳ khác nhau, thì tốt hơn hết là nên thực hiện các hoạt động nhỏ riêng biệt, không phải là một hoạt động lớn. Nếu bạn có thể khái quát hóa mã số onCreate() và giữ dưới đây, hãy nói, 100 dòng và 10 câu lệnh chi nhánh, đó là cách để đi.

Để đưa ra một ví dụ, trước đây tôi đã xây dựng một ứng dụng đơn giản có bộ sưu tập các câu hỏi thi và giới thiệu chúng một cách ngẫu nhiên cho người dùng. Mỗi câu hỏi có lựa chọn câu hỏi văn bản, minh họa và 2-4 câu trả lời. Có khoảng 500 câu hỏi khác nhau. Đây là mã tải một câu hỏi từ cơ sở dữ liệu và cập nhật bố cục. Lưu ý rằng nó xử lý số lượng câu trả lời và khả năng của một số câu hỏi không có minh họa.

public void loadQuestion(int id) { 
    // Columns in questions table: 
    // CREATE TABLE questions (
    //   id integer, 
    //   q text, 
    //   a1 text, 
    //   a2 text, 
    //   a3 text, 
    //   a4 text, 
    //   a5 text, 
    //   correct integer, 
    //   img blob 
    // ); 

    Cursor c = mDatabase.rawQuery("SELECT * FROM questions where id=" + id, null); 
    c.moveToFirst(); 

    TextView text = (TextView) findViewById(R.id.text); 
    text.setText(c.getString(1)); 

    RadioGroup g = (RadioGroup) findViewById(R.id.answers); 
    g.clearCheck(); 

    // Load answers! 
    int correct = c.getInt(7); 
    int[] buttons = new int[] {R.id.a1, R.id.a2, R.id.a3, R.id.a4, R.id.a5}; 
    for (int i=0; i < 5; i++) { 
     String answerText = c.getString(i + 2); 
     RadioButton rb = (RadioButton) findViewById(buttons[i]); 
     if (answerText != null && answerText.length() > 0) { 
      rb.setText(answerText); 
      rb.setTag(i + 1 == correct ? "correct" : null); 
      rb.setVisibility(RadioButton.VISIBLE); 
     } else { 
      rb.setVisibility(RadioButton.GONE); 
     } 
    } 

    byte[] encoded = c.getBlob(8); 
    ImageView iv = (ImageView) findViewById(R.id.image); 
    if (encoded != null && encoded.length > 0) { 
     iv.setVisibility(ImageView.VISIBLE); 
     iv.setImageBitmap(bytesToBitmap(encoded)); 
    } else { 
     iv.setVisibility(ImageView.GONE); 
    } 
} 

Ý anh là gì bởi: Trở lại nút sẽ không phá vỡ, Android theo dõi tồn đọng của bạn?

Khi người dùng di chuyển từ hoạt động để hoạt động, trên các ứng dụng, các hệ điều hành Android giữ một lịch sử điều hướng tuyến tính của các hoạt động người dùng đã truy cập. Đây là hoạt động ngăn xếp, còn được gọi là ngăn xếp lại. Nói chung, khi người dùng bắt đầu hoạt động mới , nó được thêm vào hoạt động ngăn xếp, do đó nhấn BACK hiển thị hoạt động trước đó trên ngăn xếp.

(từ Activity and Task Design Guidelines)

+0

Hiện tại tôi có 1 bố cục XML và 2 bố cục hàng cho 27 menu, chúng được điền vào lúc chạy. Tôi có thể làm tương tự cho nội dung một cách trung thực, tôi chỉ không nghĩ về nó! Tuy nhiên nếu tôi đã làm theo cách này, sẽ không dễ dàng nhất để có 1 hoạt động cho mỗi trang nội dung trong onCreate() điền vào bố cục với nội dung thích hợp không? Và cuối cùng, ý của bạn là gì: Nút quay lại sẽ không bị hỏng, Android theo dõi tình trạng tồn đọng của bạn? – Stu

+0

@Stu: Đã cập nhật câu trả lời của tôi –

+0

Cảm ơn Peteris. Tôi đã đi với "một vài hoạt động" cuối cùng. Tôi có 1 hoạt động cho mỗi loại menu (nếu có biểu tượng hay không) và 1 hoạt động trên mỗi trang nội dung. Tôi chuyển ý định trong đó đặt nội dung thích hợp cho bố cục. Nó có vẻ dễ dàng hơn nhiều theo cách này! – Stu

0

bạn có thể tái sử dụng bố trí của bạn và có thể sử dụng startAcitity và startActivityForResult phương pháp để quản lý các hoạt động tính hiệu quả.

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