5

Tôi đang cố gắng xử lý tất cả API ActionBar và Fragments mới. Tôi có một hoạt động chính và tôi muốn nó quản lý hai tab khác nhau. Tôi đang sử dụng ActionBarSherlock để hỗ trợ phiên bản cũ hơn ICS.Fragment onResume không được gọi sau khi Fragment được tách ra và sau đó đính kèm lại

Mỗi tab chứa Fragment riêng (mỗi cái là một lớp con của SherlockListFragment) Tôi nhận nó hoạt động cơ bản, nhưng tôi có vấn đề là tôi chắc chắn là ngu ngốc, nhưng tôi không thể hiểu được chưa:

Lần đầu tiên mỗi Phân đoạn được hiển thị, mọi thứ đều OK, danh sách được điền và do đó các MenuItems trong ActionBar.

Nhưng lần thứ hai bạn nhìn thấy một tab (Sau khi swicth và switch-back), danh sách không nhận được, cũng không phải là ActionBems MenuBar.

Đây là cách tôi đang chuyển đổi các tab:

@Override 
public void onTabSelected(Tab tab, FragmentTransaction transaction) { 
    SherlockListFragment toAttach = // Find the right fragment here... 

    if (toAttach != null) { 
     if (toAttach.isAdded() == false) { 
      transaction.add(R.id.tab_placeholder, toAttach, 
        REMINDER_FRAGMENT_TAG); 
     } else { 
      transaction.attach(toAttach); 
     } 
    } 
} 

Và onTabUneselect Tôi tách các Fragment:

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction transaction) { 
    SherlockListFragment toDetach = // Find the right fragment 
    if (toDetach != null) { 
     transaction.detach(toDetach); 
    } 
} 

Tôi Populating danh mục và menu ActionBar trong onResume:

@Override 
public void onResume() { 
    super.onResume(); 
    setHasOptionsMenu(true); 
    fillRemindersList(); 
} 

Tôi cũng đã thử tính năng này trong onStart và onCreateView nhưng không được ...

Vì vậy, tôi thiếu gì ở đây? Và nếu có những vấn đề khác trong mã của tôi mà tôi không biết, xin vui lòng cho biết.

Cảm ơn!

EDIT: tab

Tôi chỉ khẳng định rằng onResume doesnt được gọi sau khi tôi chuyển đổi các tab, đó là chắn sai vì tôi tách và tái gắn họ ... Tôi chuyển đổi các nhầm đường?

Trả lời

2

Hãy thử sử dụng transaction.remove (fragment) trong onTabUnselected và transaction.replace trong onTabSelected.

+0

Cảm ơn, tôi hy vọng rằng đây là câu trả lời, mặc dù nó không liên quan nữa, bởi vì tôi đã chuyển sang Danh sách điều hướng. (Làm cho ý nghĩa hơn trong trường hợp của tôi, và hoạt động hoàn hảo :)) –

+0

Trong trường hợp của tôi gọi là 'FragmentTranaction.remove (fragment # 1)' trong đoạn # 1 ngay trước khi gọi 'FragmentTransaction.commit()' giúp tôi buộc đoạn # 1 đi qua onPause() ... onDestroyView() trên thay thế và đi qua onCreateView() ... onResume() khi tôi quay trở lại đoạn # 1 nhấn nút quay lại. –

0

Thực hiện beginTransaction() và commit() bên ngoài mã này mà tôi giả sử hoặc bạn đã quên? Bạn có thể thấy một thủ thuật sử dụng ở đây từ các mẫu cũng như: https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/fragments/src/com/actionbarsherlock/sample/fragments/FragmentTabs.java

+0

Không! Như bạn có thể thấy tôi đang triển khai giao diện ActionBar.TabListener. Trong các lời gọi lại TabListener, bạn nhận được một FragmentTransaction sẵn sàng để sử dụng (Tức là - "bắt đầu") và bạn ** không gọi ** cam kết như tài liệu nói rõ ràng. Bên cạnh đó, các mảnh vỡ đang được hoán đổi nên nó không phải là ... –

+0

Ah thực sự, xin lỗi về điều đó. –

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