2011-02-04 103 views
9

我想弄清楚如何在多个活动中包含常见的代码段。将相同的上下文菜单添加到多个活动

更具体地说,我有一个上下文菜单,我想包括在几个活动中。 我看到这个,但只是不明白如何扩展到多个活动。 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; 
    } 


} 

回答

23

,如果你想在超过1个活动添加相同的功能不是创造像BaseActivity 1个共同的活动 和扩展活动将包括在继承的所有活动

,比如我有叫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); 

    } 

} 
+0

谢谢一切!这些真的很有帮助。我最终使用了两个BrennaSoft的xml示例。然后djk的主要屏幕/基本活动样本清理我的代码很多。 – user401183 2011-02-05 02:27:11

3

您可以在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); 
    } 
2

尝试使用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

我认为这可能帮助你。

相关问题