【问题标题】:Adding the same context menu to multiple activities向多个活动添加相同的上下文菜单
【发布时间】:2011-06-21 02:46:39
【问题描述】:

我试图弄清楚如何在多个活动中包含常见的代码。

更具体地说,我有一个上下文菜单,我想将它包含在几个活动中。 我看到了这一点,但只是不明白如何扩展到多个活动。 http://developer.android.com/guide/topics/ui/menus.html

我已将此设置为 Menu.java

    public class Menu extends Activity{

    // bottom menus
    public static final int Menu1 = 1;
    public static final int Menu2 = 2;
    public static final int Menu3 = 3;
    public static final int Menu4 = 4;
    public static final int Menu5 = 5;
    public static final int Menu6 = 6;
    public static final int Menu7 = 7;


    // / Creates the menu items
    public boolean onCreateOptionsMenu(Menu menu) {

        menu.add(0, Menu3, 0, "Create Profile").setIcon(
                this.getResources().getDrawable(R.drawable.ic_menu_add));
        menu.add(0, Menu5, 0, "Log In").setIcon(
                this.getResources().getDrawable(R.drawable.ic_menu_login));
        menu.add(0, Menu2, 0, "Settings").setIcon(
                this.getResources().getDrawable(R.drawable.ic_menu_preferences));
        menu.add(0, Menu4, 0, "About").setIcon(
                this.getResources().getDrawable(R.drawable.ic_menu_help));
        menu.add(0, Menu1, 0, "Report A Bug").setIcon(
                this.getResources().getDrawable(R.drawable.ic_menu_start_conversation));
        menu.add(0, Menu6, 0, "New Stuff").setIcon(
                this.getResources().getDrawable(R.drawable.ic_menu_view));
        return true;
    }



    private MenuItem add(int i, int menu32, int j, String string) {
        // TODO Auto-generated method stub
        return null;
    }



    // Handles item selections from preference menu
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case Menu1:
            startActivity(new Intent(this, Bug.class));
            return true;
        case Menu2:
            startActivity(new Intent(this, EditPreferences.class));
            return true;
        case Menu3:
            startActivity(new Intent(this, CreateAccount.class));
            return true;
        case Menu4:
            startActivity(new Intent(this, About.class));
            return true;
        case Menu5:
            startActivity(new Intent(this, Login.class));
            return true;
        case Menu6:
            startActivity(new Intent(this, NewAdditions.class));
            return true;
        }

        return false;
    }


}

【问题讨论】:

    标签: android android-activity contextmenu extend


    【解决方案1】:

    如果您想在超过 1 个活动中添加相同的功能而不是创建 1 个通用活动 像 BaseActivity 并扩展该活动将在您继承的所有活动中包含该常用功能

    例如我调用了checklogin函数,你可以把你的菜单代码放在这里,

    public class BaseActivity extends Activity {
    
          @Override
         protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         settings = getSharedPreferences(PREFS_NAME, 0);
            if (IsFullScreen) {
               requestWindowFeature(Window.FEATURE_NO_TITLE);
               getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            }
    
            this.CheckLogin();
         }
    
        // Check login function
        // Your menu code
    
      }
    

    现在你可以在你的活动中扩展它

    public class MainScreen extends BaseActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    
        this.setContentView(R.layout.mainscreen);
    
       }
    
    }
    

    【讨论】:

    • 谢谢大家!这些真的很有帮助。我最终使用了 BrennaSoft 的 xml 示例。然后 djk 的主屏幕/基本活动示例来清理我的代码很多。
    • 我需要在AndroidManifest.xml中声明BaseActivity吗?还是不需要这个?
    【解决方案2】:

    您可以在 xml 文件中定义一个菜单,然后在 onCreateOptionsMenu 中加载该菜单。您仍然需要处理每个活动中的每个菜单项。您还可以创建一个 BaseActivity 类来处理每个 Activity 可以扩展的菜单内容。

    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@+id/about" android:title="About"
            android:icon="@drawable/ic_menu_about"/>
        <item android:id="@+id/search"
              android:icon="@drawable/ic_menu_search" android:title="Search"></item>
        <item android:id="@+id/my_location"
              android:title="My Location"
              android:icon="@drawable/ic_menu_mylocation">
        </item>
    </menu>
    
    
    public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.options_menu, menu);
            return super.onCreateOptionsMenu(menu);
        }
    

    【讨论】:

      【解决方案3】:

      尝试使用abstract

        abstract class BaseMenu extends Activity
        {
               //Initialize your menus
      
               // bottom menus
      public static final int Menu1 = 1;
      public static final int Menu2 = 2;
      public static final int Menu3 = 3;
      public static final int Menu4 = 4;
      public static final int Menu5 = 5;
      public static final int Menu6 = 6;
      public static final int Menu7 = 7;
      
      
      // / Creates the menu items
      public boolean onCreateOptionsMenu(Menu menu) {
      
          menu.add(0, Menu3, 0, "Create Profile").setIcon(
                  this.getResources().getDrawable(R.drawable.ic_menu_add));
          menu.add(0, Menu5, 0, "Log In").setIcon(
                  this.getResources().getDrawable(R.drawable.ic_menu_login));
          menu.add(0, Menu2, 0, "Settings").setIcon(
                  this.getResources().getDrawable(R.drawable.ic_menu_preferences));
          menu.add(0, Menu4, 0, "About").setIcon(
                  this.getResources().getDrawable(R.drawable.ic_menu_help));
          menu.add(0, Menu1, 0, "Report A Bug").setIcon(
                  this.getResources().getDrawable(R.drawable.ic_menu_start_conversation));
          menu.add(0, Menu6, 0, "New Stuff").setIcon(
                  this.getResources().getDrawable(R.drawable.ic_menu_view));
          return true;
      }
      
      
      
      private MenuItem add(int i, int menu32, int j, String string) {
          // TODO Auto-generated method stub
          return null;
      }
      
      
      
      // Handles item selections from preference menu
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
          case Menu1:
              startActivity(new Intent(this, Bug.class));
              return true;
          case Menu2:
              startActivity(new Intent(this, EditPreferences.class));
              return true;
          case Menu3:
              startActivity(new Intent(this, CreateAccount.class));
              return true;
          case Menu4:
              startActivity(new Intent(this, About.class));
              return true;
          case Menu5:
              startActivity(new Intent(this, Login.class));
              return true;
          case Menu6:
              startActivity(new Intent(this, NewAdditions.class));
              return true;
          }
      
          return false;
      }}
      

      现在扩展类 BaseMenu 而不是 Activity

      我认为这可以帮助你。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-19
        • 1970-01-01
        相关资源
        最近更新 更多