2011-11-27 32 views
14

Tôi đang gặp sự cố khi tìm ví dụ hoạt động về sử dụng phân đoạn + RoboGuice. Sự cố xảy ra khi bạn cố gắng thêm/xóa phân đoạn bằng trình quản lý giao dịch phân đoạn Android. Một khi bạn nói mảnh vỡ kế thừa từ RoboFragment, người quản lý giao dịch không còn nghĩ lớp đó là một mảnh (vì nó mở rộng RoboFragment). Tuy nhiên, bạn có thể sử dụng trình quản lý phân đoạn riêng của RoboGuice nhưng nó cũng bị treo. Có bất kỳ ví dụ nào ngoài việc thêm/xóa các đoạn RoboGuice tự động không?Bất kỳ ví dụ đơn giản nào sử dụng roboguice với các đoạn trong android?

+0

Tôi có RoboGuice và Fragments làm việc trong một ứng dụng độc đáo. Bạn có thể cung cấp dấu vết ngăn xếp để chúng tôi có thể xem vấn đề là gì không? –

+0

Ngoài ra, bạn đang sử dụng phiên bản thư viện tương thích nào? –

+0

Tôi cũng làm việc đó. –

Trả lời

13

Tôi vừa mới bắt đầu sử dụng các mảnh vỡ trên một dự án mới, và sau đây là mã Tôi đang sử dụng

Tôi không kế thừa từ lớp RoboFragment, nhưng tôi đang làm chính xác như vậy bằng cách thêm các dòng sau vào các phương thức onCreate và onViewCreated của tôi. Thừa kế từ RoboFragment không nên có bất kỳ sự khác biệt nào, trên thực tế đây là những gì mà RoboFragment trông như thế nào.

public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    RoboGuice.getInjector(getActivity()).injectMembersWithoutViews(this); 
} 

public void onViewCreated(final View view, final Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    RoboGuice.getInjector(getActivity()).injectViewMembers(this); 
    // Do whatever with your injected views. 
} 

Rõ ràng là tôi cũng đã triển khai onCreateView.

Sau đó, trong Hoạt động của tôi, tôi mở rộng FragmentActivity khi tôi đang sử dụng compatibility package. Lưu ý, bạn phải sử dụng FragmentActivity nếu bạn muốn tương thích với mức API trước 11. Nếu bạn chỉ hỗ trợ 11 cộng với bạn không cần lib tương thích hoặc sử dụng FragementActivity. Trong hoạt động của tôi, tôi sử dụng phần sau để thêm đoạn vào trang của tôi.

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.add(R.id.fragmentHolder, new MyFragment()); 
transaction.commit(); 

Loại R.id.fragmentHolder là FrameLayout.

Mọi thứ hoạt động tốt với điều này và tôi có thể sử dụng tất cả tài nguyên được tiêm và lượt xem trong đoạn của mình. Để hoàn thành, tôi đang sử dụng phiên bản 2.0-SNAPSHOT mới nhất của roboguice với phiên bản r6 của thư viện compatibity-v4 chống lại Android 2.2.1.

+0

Cảm ơn King. Bạn có bất kỳ mã nào bạn đã tìm thấy hoặc có thể tạo sẵn các đoạn mã thực sự làm những việc có ý nghĩa không? – danb

+1

Tôi e rằng tôi không, tuy nhiên bạn có thể làm bất cứ điều gì bạn có thể làm với Hoạt động trong một Phân đoạn. Phần khác duy nhất là truyền dữ liệu từ một Phân đoạn này sang một Phân đoạn khác vì chúng không giao tiếp trực tiếp. Cách tôi đã nhìn thấy cách tiếp cận này là kiểm tra kiểu getActivity() trong onCreate() và đảm bảo rằng một số giao diện mà bạn đã tạo để chấp nhận dữ liệu từ đoạn. Bằng cách này, Hoạt động của bạn có thể triển khai giao diện này và chuyển dữ liệu nếu cần đến đoạn tiếp theo. – Kingamajick

+0

Bạn có chắc chắn rằng nó hoạt động không? Khi tôi thử nó với Roboguice 2.0 tôi nhận được 'IllegalArgumentException: MyFragmentActivity dường như không phải là một ngữ cảnh RoboGuice (instanceof RoboContext)' –

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