2012-01-31 16 views
5

Tôi đã quản lý để tạo menu Tab ActionBar, gọi các lớp khác nhau mở rộng Phân đoạn. Vấn đề là, khi tôi thay đổi hướng, việc chuyển đổi giữa các mục menu sẽ không làm gì cả. Nhưng cuối cùng tôi đã tìm ra được vấn đề.Android ICS + Tab ActionBar + Thay đổi định hướng

Vấn đề chính ở đây là đoạn cũ không được gỡ bỏ khi định hướng thay đổi, vì vậy luôn luôn có một bản sao của một tab không sử dụng ngay trên của người dùng chọn tab

Bất kỳ ý tưởng? Tôi đang thiếu một cái gì đó cơ bản?

Cảm ơn bạn

Trả lời

15

cuối cùng tôi đã tìm thấy giải pháp của bản thân mình, trong onTabSelected phương pháp quy định tại lớp tùy chỉnh ActionBar.TabListener của tôi, tôi đã ft.add đó thêm đoạn để Xem tôi.

Khi định hướng được thay đổi, phương pháp onTabUnselected không được gọi, do đó, Fragment vẫn ở đó.

Thay thế ft.add thành ft.replace được quản lý để xóa tất cả các đoạn cũ để các đoạn mới được hiển thị chính xác.

Hy vọng điều này sẽ giúp người khác

1

Tôi nghĩ tốt hơn nên lưu selectedIndex vào hoạt động giải trí. Bằng cách đó bạn không có vấn đề vì chỉ mục tương tự được chọn và không được chọn là không cần thiết và cũng đẹp hơn cho người dùng.

protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     int i = getActionBar().getSelectedNavigationIndex(); 
     outState.putInt("selectedTabIndex", i);  
} 

    //And then restore 
    private void initActionBar(Bundle savedInstanceState) { 
     ActionBar ab = getActionBar(); 
     ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     ab.addTab(...); 
      ... 

     if(savedInstanceState != null) { 
      int index = savedInstanceState.getInt("selectedTabIndex"); 
      getActionBar().setSelectedNavigationItem(index); 
     } 
-1

Kiểm tra hàm tạo của trình lắng nghe tab cho đoạn cũ (trái từ onTabUnselected() không được gọi) và tách nó ra. Có một trình lắng nghe tab được tạo riêng cho ActionBarSherlock tại đây: FragmentTabListener.java. Mã xây dựng tương tự (để sử dụng không có các thư viện hỗ trợ) cũng nằm trong FragmentTabs.java từ các bản trình diễn API.

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