为多个活动实施一次选项菜单

时间:2012-03-19 04:04:27

标签: java android

我正在尝试为我的应用程序实现选项菜单,并且在不同的活动中使用相同的菜单。在Android developers site中,它说明了以下内容:

  

提示:如果您的应用程序包含多个活动及其中一些活动   提供相同的选项菜单,考虑创建一个活动   除了onCreateOptionsMenu()和之外什么都不做   onOptionsItemSelected()方法。然后为每个扩展此类   应该共享相同选项菜单的活动。这样,你就可以   管理一组用于处理菜单操作和每个后代的代码   class继承了菜单行为。如果要添加菜单项   其中一个后代活动,覆盖onCreateOptionsMenu()   那个活动。调用super.onCreateOptionsMenu(菜单)这样原来的   创建菜单项,然后使用menu.add()添加新菜单项。您   也可以覆盖单个菜单的超类的行为   项目

我的活动是从Activity,ListActivity或MapActivity延伸出来的,那么实现他们在这里提出建议的正确方法是什么?可能吗?因为我无法为所有这些扩展这个新类,所以我只能做类似公共抽象的BaseMenu扩展Activity(如this question中所述),但这对我不起作用。所以我想知道是否有可以实施的工作。

提前致谢

3 个答案:

答案 0 :(得分:2)

对于那个常见的Base菜单类,您需要扩展MapActivity类。因此,您可以为所有活动扩展该公共基本菜单类。

对于ListActivity,您也可以在没有ListActivity的情况下实现列表,只能通过Activity或MapActivity实现它。

你必须在xml文件中声明listview,其ID如下所示。

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

然后你必须在你的活动类中声明它。

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

如上所述,您可以在不扩展ListActivity的情况下实现它。

答案 1 :(得分:1)

如果不扩展mapactivity类,你就不能使用mapview ....请参考这个.. MapView without MapActivity ..所以你应该让你的基类扩展地图活动...和使用listview的活动..把listview放在xml中你可以在你的活动中使用它..

答案 2 :(得分:0)

我将创建一个静态MenuProvider类,它静态地实现onCreateOptionsMenu()和onOptionItemsSelected()方法,从onCreateOptionsMenu()和onOptionsItemsSelected()中调用活动,如下所示:

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
    }
}

在您的每项活动中,您都可以:

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 */);
    }

    ...
}