2013-01-23 59 views
23

Tôi có hoạt động hiển thị một vài đoạn. Chế độ xem hoạt động chỉ chứa ViewPager được khởi tạo với FragmentPagerAdapter tùy chỉnh. Bộ điều hợp này cung cấp điều hướng trong 3 đoạn.Android: Cách tạo lại thanh Hành động khi phân đoạn đã thay đổi

Tất cả dường như hoạt động tốt ngoại trừ thanh Hành động.

tôi ghi đè phương pháp onCreateOptionsMenu() trong các mảnh vỡ của tôi để tạo thanh hành động cá nhân cho bất kỳ đoạn:

 
    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    { 
     super.onCreateOptionsMenu(menu, inflater); 
     menu.clear();

//fragment specific menu creation }

Khi tôi làm swipe, đoạn mới xuất hiện, nhưng thanh hành động giữ nguyên trong vài giây. Có lẽ sau vài giây, phương thức này được gọi và thanh Hành động sẽ thay đổi.

Điều này có vẻ khá xấu khi thanh tác vụ được thay đổi trong một thời gian sau khi vuốt xong. Làm cách nào để tạo lại thanh tác vụ ngay trước khi bắt đầu vuốt?

Trả lời

26

Bạn có thể yêu cầu android để tái tạo actionbar trước khi nó tự động thực hiện bằng cách gọi invalidateOptionsMenu();

Do một nơi nào đó gần với điểm mà bạn thay đổi các mảnh để thử và giảm 'lag' giữa mảnh và actionbar thay đổi .

Sửa

một giải pháp hoàn chỉnh có thể trông như thế này:

class activity extends Activity{ 

private void switchFragment(){ 

...do fragment changing stuff 

activity.invalidateOptionsMenu(); 

} 

} 

class someFragment extends Fragment{ 

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{ 
    super.onCreateOptionsMenu(menu, inflater); 
    menu.clear(); 


    //fragment specific menu creation 
} 

} 

bất cứ đoạn là mở cửa suốt

activity.invalidateOptionsMenu(); 

sẽ sau đó gọi nó

onCreateOptionsMenu 

và bạn có thể tạo một trình đơn riêng cho từng phần trong đó

+0

Vấn đề là tôi có thể không tìm mọi cách rõ ràng để yêu cầu android tạo lại thanh tác vụ. –

+0

@Mik tôi đã cập nhật câu trả lời của mình để trợ giúp nhưng tôi thực sự không hiểu bạn đầy đủ ... invalidateOptionsMenu() nên "yêu cầu android tạo lại thanh tác vụ" – roarster

+5

Cảm ơn bạn đã trả lời, nhưng 1. Khi bạn gọi .invalidateOptionsMenu(); hệ thống không thực sự tạo lại thanh tác vụ. Nó chỉ gây ra việc gọi onCreateOptionsMenu() trong đoạn của bạn cho phép bạn thay đổi Menu (là một phần của thanh tác vụ). Nếu bạn gọi setHasOptionsMenu (true) trong đoạn của bạn, thì bạn không cần phải gọi invalidateOptionsMenu(), vì onCreateOptionsMenu() được gọi tự động. 2. Tôi không thể tìm thấy cách gọi onCreateOptionsMenu() trước khi vuốt. –

1

Cuối cùng tôi không thể tìm thấy bất kỳ cách âm thanh nào để đạt được điều này.

Cách tốt nhất là làm cho thanh tác vụ trở thành một phần của phân đoạn, không hoạt động, nhưng điều đó là không thể.

Tôi kết thúc bằng cách xóa menu và tiêu đề của thanh tác vụ khi bắt đầu vuốt (bạn có thể đặt trình nghe đặc biệt trong PageView) và đặt lại menu và tiêu đề khi vuốt hoàn toàn và đoạn mới được hiển thị.

Trong một số thời gian trễ và thanh tác vụ trông có vẻ trống rỗng trong khi vuốt, nhưng tốt nhất bạn có thể làm.
API Android là c ...

+0

jesus ... giải pháp kém! kiến trúc android rất phức tạp !!! – Mateus

4

Có thể thực hiện bằng cách triển khai onCreateOptionsMenu và gọi setHasOptionsMenu (true) trong gọi lại onAttach trong từng đoạn và thay đổi hành động tương ứng.

Để hiển thị các đoạn mà không cần bất cứ hành động setHasOptionsMenu (false) trong đó

+0

Cảm ơn bạn đã đề cập đến 'onAttach' và' setHasOptionsMenu'! – Steven

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