2015-02-12 21 views
9

Gần đây tôi đã bắt đầu xem xét việc phát triển ứng dụng cho thiết bị Android của mình. Điều gì đã bắt đầu sự quan tâm của tôi là tôi đã chơi đùa với một vài arduinos có ý tưởng tuyệt vời để làm cho họ giao tiếp với điện thoại của tôi, như nói một giao diện cho bất cứ giá trị nào tôi đang đo trên bản thân arduino. Bây giờ tôi có thể thực hiện một cách dễ dàng và sử dụng một nguồn công cộng để thực hiện điều này nhưng không có nhiều để học theo cách đó, và tôi muốn nó theo cách tôi muốn.Cách xử lý nhiều Mảnh cho một Hoạt động

Bây giờ tôi cho rằng câu hỏi đầu tiên tôi cần đặt ra là, liệu nhiều đoạn/hoạt động đơn lẻ có phải là cách tốt nhất để tôi thực hiện việc này không? Về cơ bản, tôi muốn 1 kết nối với Arduino, kéo tất cả các giá trị, nhưng tùy thuộc vào "tab" tôi đã chọn Tôi muốn giá trị nhất định hiển thị những cách nhất định. Tôi quyết định biến từng tab thành một đoạn khác nhau và chỉ hiển thị các giá trị theo những cách khác nhau. Như tôi đã nói, tôi chỉ mới bắt đầu trải nghiệm phát triển Android nên không có nhiều cơ sở để lựa chọn này.

Vì vậy, được gắn bó với ý tưởng mảnh nhiều này tôi có:

  1. Tạo nhiều file Fragment.xml
  2. Defined một lớp cho mỗi điểm riêng
  3. Tạo một danh sách để hiển thị Fragments sẵn
  4. Đoạn trích được hiển thị và được hiển thị khi được chọn

Vì vậy, về cơ bản, chế độ xem trênMenuItemSelect của tôi ed như thế này

FragmentTransaction FT = getFragmentManager.beginTransaction(); 
switch(position){ 
    case 1: 
     FT.replace(R.id.fragment_container, new MyFragment()).commit(); 
     break; 
    case 2: 
     FT.replace(R.id.fragment_container, new MySecondFragment()).commit(); 
     break; 
} 

Mã trên đã hoạt động, nó đã làm những gì tôi muốn mà không gặp bất kỳ sự cố nào. Tôi không thực sự thích điều này mặc dù, bởi vì cho mỗi Fragment tôi muốn thêm tôi sẽ cần phải thêm một trường hợp mới để chuyển đổi. Điều này cũng tạo ra một mảnh mới mỗi lần, ngay cả khi một mảnh đã được tạo ra. Đó có phải là vấn đề không?

Vấn đề lớn nhất mà tôi có với nó là nó không phải là dễ dàng nhất để mở rộng quy mô. Đối với 2-3 mảnh, đây không phải là cách tồi tệ nhất để xử lý nó (trong mắt tôi). Tôi muốn có thể có nhiều mảnh mà tôi muốn mà không có một trường hợp riêng lẻ cho từng cái trong công tắc. Vì vậy, những gì tôi đã làm đã được tạo ra một fragmentList để giữ một trường hợp duy nhất của từng mảnh của tôi.

List<Fragment> fragmentList; 

private void populateFragmentList();{ 
    fragmentList = new ArrayList<Fragment>(); 
    fragmentList.add(new HomeFrag()); 
    fragmentList.add(new BluetoothFragment()); 
    fragmentList.add(new USBFragment()); 
    fragmentList.add(new RCInfoFragment()); 
    fragmentList.add(new ControllerFragment()); 
    fragmentList.add(new FingerCordsFrag()); 
} 
public void onMenuItemSelect(int position, int curPosition){ 
    if(fragmentList.get(position).isAdded()){ 
     getFragmentManager().beginTransaction().show(fragmentList.get(postition)) 
     .hide(fragmentList.get(curPosition)).commit(); 
    } 
    else 
     getFragmentManager().beginTransaction().add(R.id.fragment_container, fragmentList.get(position)).show(fragmentList.get(position)).hide(fragmentList.get(curPosition)).commit(); 
} 

Và phương pháp này cũng hoạt động. Tôi có thể làm cho nó hiển thị tất cả các mảnh vỡ của tôi, mà không phải lặp lại từng mảnh mỗi lần. Tôi tin rằng điều này làm những gì tôi muốn nó làm, nó quy mô khá tốt (tốt hơn một switch/trường hợp IMO). Vấn đề mà tôi có bây giờ là mọi thứ trở nên điên rồ khi tôi thay đổi định hướng. Cho đến bây giờ tôi chỉ đang thử nghiệm chế độ chân dung, tôi không thể xem bất kỳ đoạn nào của tôi khi tôi chọn chúng theo hướng khác. Tôi có thể bắt đầu nó theo một trong hai hướng, và nó hoạt động, nhưng khi tôi thay đổi nó trong thời gian chạy, tôi chỉ có thể nhìn thấy một mảnh mà tôi đã mở khi tôi thay đổi hướng.

Bây giờ, mỗi đoạn "onCreateView" đang được gọi, chỉ là màn hình không được hiển thị. Tôi tin rằng tôi có nó thu hẹp lại để nó không được gắn vào hoạt động mới được tạo ra từ sự thay đổi định hướng. Có anyway tôi có thể reattach mảnh vỡ đã được tạo ra cho một hoạt động mới.

Nói tóm lại, những câu hỏi tôi có bao gồm:

  1. là mô hình này thậm chí là một cách tốt cho các ứng dụng của tôi không?
  2. Có cách nào tốt để xử lý Phân đoạn có quy mô tốt không?Không thể dường như tìm thấy bất kỳ ví dụ nào.
  3. Sử dụng '' MyFragment mới() '' mỗi lần tôi mở một tab khác là cách hợp lý để đạt được điều này?
  4. Là cách của tôi để lưu trữ các Mảnh vỡ của tôi trong danh sách một cách hợp lý để xử lý chúng?
  5. Tôi làm cách nào để gắn lại một đoạn cho Hoạt động mới sau khi thay đổi định hướng ?

Cảm ơn bạn đã dành thời gian.

* Đã phải nhập tất cả mã này khi đang di chuyển vì tôi, vì một lý do nào đó, không thể lấy mã C/P'd của tôi để định dạng chính xác.

Trả lời

-1

Tôi tin rằng nó là một lựa chọn tốt để sử dụng mảnh vỡ và bắt đầu với this example ...

Bạn chắc chắn nên ghi đè một số "Adapter" để xử lý tất cả các giao dịch dễ dàng hơn ...

Kiểm tra here cho vấn đề định hướng ...

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