2012-03-09 50 views
14

Bất kỳ ai có thể đưa ra ví dụ nhanh về cách thay đổi nội dung của thanh tác vụ Hoạt động dựa trên điều gì đó diễn ra trong một đoạn? Mục đích của tôi:Android: Thay đổi các mục menu ActionBar từ Fragment

Các mục menu thông thường -> Nội dung nào đó trong đoạn được di chuyển -> các mục menu thay đổi để lưu/hủy các nút.

Xung đầu tiên của tôi là thiết lập Bộ thu phát sóng trong cả hoạt động và đoạn để nói chuyện chéo, nhưng tôi không chắc liệu điều này có đúng không.

Trả lời

7

Tác phẩm sau đây dành cho tôi. Tôi có một lớp tùy chỉnh mà thực hiện ListView.MultiChoiceModeListener bên trong một Fragment:

public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { 
    // Choose the correct Action Bar menu to display 
    int menu = myCondition == true ? R.menu.my_default_menu : R.menu.my_menu_2; 

    // Configure to use the desired menu 
    mode.getMenu().clear(); 
    MenuInflater inflater = getActivity().getMenuInflater(); 
    inflater.inflate(menu); 
} 

Với cách bạn phát hiện 'cái gì đó trong đoạn đã chuyển', mở rộng ListView.MultiChoiceModeListener không thể làm việc cho bạn, nhưng hy vọng này minh họa làm thế nào để thay đổi thực đơn. Điều quan trọng là truy cập vào một cá thể ActionMode.

+0

Bạn có thể nhận được phiên bản Mã hành động của hoạt động ở đâu? – Neilers

4

Tôi nghĩ bạn muốn sử dụng số contextual action mode. Trên sự kiện kéo, bạn sẽ bắt đầu một ActionMode mới có thể thay thế nội dung của thanh hành động với các mục menu cụ thể cho những gì bạn muốn cho phép người dùng thực hiện. Khi người dùng chọn một hành động, bạn hoàn thành chế độ hành động và thanh hành động trở về trạng thái trước đó của nó.

20

Các phân đoạn có thể thay đổi menu trong thanh tác vụ. Để làm điều đó, bạn phải thêm cờ cần thiết vào số oncreate() của phân đoạn bằng cách sử dụng phương thức setHasOptionsMenu(true);

Khi đoạn của bạn được tải, bạn sẽ nhận được cuộc gọi tại số onCreateOptionsMenu(Menu menu, MenuInflater inflater) giống như trong một hoạt động. Sau đó thực hiện các thay đổi cần thiết cho menu của bạn.

Lưu menu của bạn thành toàn cầu theo phân đoạn và bất cứ khi nào bạn muốn thực hiện thay đổi, hãy áp dụng trên đó.

+1

Đây là câu trả lời đúng nhất. –

1

Không chắc chắn nếu một thể hiện ActionBar sẽ giúp với menu bạn nhưng chắc chắn sẽ có ích .. Dưới đây là một cách để có được về nó

Hãy thử điều này để có được những ActionBar từ FragmentActivity sử dụng (hoạt động Hoạt động) onAttach trong Fragment.

Trước hết làm cho một đối tượng toàn cầu của FragmentActivity của bạn trong Fragment như

public class YourFragment extends Fragment { 

    private YourFragmentActivity context; 
} 

Override này này trong lớp YourFragment

@Override 
public void onAttach(Activity activity){ 
    context = (YourFragmentActivity)activity; 
    super.onAttach(activity); 
} 

Sau đó, trong phương pháp OnCreate trong YourFragment làm

này
@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, Bundle savedInstanceState){ 
    ... 

    android.support.v7.ActionBar actionBar = context.getSupportActionBar(); 

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