Các mẫu thiết kế hữu ích để làm việc với FragmentManager trên Android


10

Khi làm việc với các đoạn, tôi đã sử dụng một lớp bao gồm các phương thức tĩnh xác định các hành động trên các đoạn. Đối với bất kỳ dự án cụ thể nào, tôi có thể có một lớp được gọi FragmentActions, chứa các phương thức tương tự như sau:

public static void showDeviceFragment(FragmentManager man){
    String tag = AllDevicesFragment.getFragmentTag();

    AllDevicesFragment fragment = (AllDevicesFragment)man.findFragmentByTag(tag);

    if(fragment == null){
        fragment = new AllDevicesFragment();
    }

    FragmentTransaction t = man.beginTransaction();
    t.add(R.id.main_frame, fragment, tag);

    t.commit();
}

Tôi thường sẽ có một phương pháp cho mỗi màn hình ứng dụng. Tôi làm một cái gì đó như thế này khi tôi làm việc với các cơ sở dữ liệu cục bộ nhỏ (thường là SQLite) vì vậy tôi đã áp dụng nó cho các đoạn, dường như có một quy trình công việc tương tự; Tôi chưa kết hôn với nó mặc dù.

Bạn đã tổ chức các ứng dụng của mình để giao diện với Fragment API như thế nào và bạn nghĩ mẫu ứng dụng nào (nếu có) sẽ áp dụng điều này?


1
Tại sao bạn có một lớp chịu trách nhiệm hiển thị tất cả các loại mảnh? Không phải nó nên là một phương thức tĩnh bên trong lớp Fragment bên trong sao?
Piotr

Câu trả lời:


3

Mẫu được chấp nhận là có một phương thức xuất xưởng bên trong lớp phân đoạn tùy chỉnh của bạn (thường được gọi là newInstance () nhưng là lựa chọn của người giao dịch). Vì vậy, lớp phân mảnh của bạn sẽ trông giống như thế này:

public class MyFragment extends Fragment
{
    public static MyFragment newInstance()
    {
        MyFragment newFragment = new MyFragment();
        // add any bundle arguments here if needed
        return newFragment;
    }
    // rest of fragment class...
}

Sau đó, khi bạn tạo một đoạn và thêm nó vào backstack, thay vì nói:

Đoạn MyFragment = MyFragment mới ();

Bạn có thể sử dụng phương thức xuất xưởng thay vì từ khóa 'mới'.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.