2012-03-19 16 views
5

Tôi đang cố triển khai thực đơn tùy chọn cho ứng dụng của mình và menu tương tự được sử dụng trong các hoạt động khác nhau. Trong Android developers site, nó nói như sau:Thực hiện menu tùy chọn một lần cho một số hoạt động

Mẹo: Nếu ứng dụng của bạn có chứa nhiều hoạt động và một số trong số họ cung cấp cùng một menu tùy chọn, xem xét việc tạo một hoạt động mà thực hiện không có gì ngoại trừ onCreateOptionsMenu() và onOptionsItemSelected() phương pháp. Sau đó, mở rộng lớp này cho mỗi hoạt động sẽ chia sẻ cùng một trình đơn tùy chọn. Bằng cách này, bạn có thể quản lý một bộ mã để xử lý các tác vụ menu và mỗi hậu duệ lớp kế thừa các hành vi menu. Nếu bạn muốn thêm các mục menu vào một trong các hoạt động hậu duệ, ghi đè lênCreateOptionsMenu() trong hoạt động đó. Gọi super.onCreateOptionsMenu (menu) để các mục menu gốc được tạo, sau đó thêm các mục menu mới với menu.add(). Bạn cũng có thể ghi đè hành vi của lớp học siêu hạng cho từng menu mục.

Các hoạt động của tôi mở rộng từ Hoạt động, ListActivity hoặc MapActivity, vậy cách nào để thực hiện những gì họ đề xuất ở đây là đúng? là nó có thể? Bởi vì tôi không thể mở rộng lớp mới này cho tất cả những điều này, tôi chỉ có thể làm một cái gì đó như trừu tượng công khai BaseMenu mở rộng Hoạt động (như được giải thích trong this question) nhưng điều này không hiệu quả đối với tôi. Vì vậy, tôi tự hỏi nếu có một công việc xung quanh tôi có thể thực hiện.

Cảm ơn trước

+0

+1 cho câu hỏi hay của bạn. –

Trả lời

2

Đối với lớp trình đơn Cơ sở chung bạn cần mở rộng lớp MapActivity. Vì vậy, bạn có thể mở rộng lớp trình đơn cơ sở chung cho bạn tất cả các hoạt động.

Đối với ListActivity đó, bạn cũng có thể triển khai danh sách không có ListActivity, bạn có thể thực hiện nó chỉ bằng Activity hoặc MapActivity.

bạn phải khai báo listview trong tệp xml với id như dưới đây.

<ListView 
      android:id="@+id/listView" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 

Sau đó, bạn phải khai báo trong lớp hoạt động của mình.

ListView listView = (ListView)findViewById(R.id.listView); 
listView.setAdapter(your adapter); 

Như ở trên, bạn có thể triển khai mà không mở rộng ListActivity.

+0

Đây có phải là cách hay để sử dụng MapActivity thay vì Hoạt động nếu không có yêu cầu của Bản đồ trong một số Hoạt động. Tôi nghĩ nó tiêu thụ nhiều bộ nhớ hơn. –

+1

Như tôi biết bản đồ không được thực hiện mà không có hoạt động trên bản đồ, vì vậy đối với tùy chọn trình đơn cơ bản chung, đây là cách phù hợp. –

1

bạn không thể sử dụng chế độ xem bản đồ mà không mở rộng lớp bản đồ .... tham khảo .. MapView without MapActivity ..so bạn nên để lớp cơ sở mở rộng hoạt động bản đồ ... và cho hoạt động sử dụng listview .. đặt listview vào xml và bạn có thể sử dụng nó trong hoạt động của bạn ..

0

tôi sẽ tạo ra một lớp MenuProvider tĩnh mà thực hiện onCreateOptionsMenu của bạn() và phương pháp tĩnh được gọi là từ onCreateOptionsMenu() và onOptionsItemsSelected() của các hoạt động onOptionItemsSelected(), như vậy:

public static class MenuProvider { 

    // You can pass it the activity and other variables used by this method if 
    // you need to. 
    // Since the implementation is the same across all activities, they should 
    // pass the same variables. 
    public static void onCreateOptionsMenu(MenuItem item, Activity callingActivity, ...) 
     ... // Do stuff on create 
    } 

    public static void onOptionItemsSelected(MenuItem item, Activity callingActivity, ...) 
     ... // Do stuff on item select 
    } 
} 

Và trong mỗi hoạt động của bạn es, bạn sẽ làm:

public class MyMapActivity extends MapActivity { 
    ... 

    public void onCreateOptionsMenu(MenuItem item) 
     MenuProvider.onCreateOptionsMenu(item, this, ... /*other variables */); 
    } 

    public static void onOptionItemsSelected(MenuItem item) 
     MenuProvider.onOptionItemsSelected(item, this, ... /*other variables */); 
    } 

    ... 
} 
+0

Cảm ơn bạn, tôi không biết tại sao tôi không nghĩ về điều này trước đây :) Có lẽ nó không phải là thanh lịch như các triển khai khác được đề xuất, nhưng tôi nghĩ rằng nó là dễ dàng hơn và ít lộn xộn kể từ khi tôi đã không được lập trình trong android nhiều. – marimaf

+0

Các triển khai cho onCreateOptionMenu và onOptionItemsSelected thực hiện một số điều như Intents chẳng hạn. Tôi đã mở rộng MenuProvider từ hoạt động nhưng sau đó nó ném cho tôi một lỗi cho sửa đổi tĩnh trên những phương pháp đó. – marimaf

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