2011-02-04 22 views
9

Sto cercando di capire come includere parti di codice comuni in più attività.Aggiunta dello stesso menu di scelta rapida a più attività

In particolare, ho un menu di scelta rapida che vorrei includere in diverse attività. Ho visto questo, ma proprio non capisco come estendere a più attività. http://developer.android.com/guide/topics/ui/menus.html

ho questo impostato come 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; 
    } 


} 

risposta

23

se si desidera aggiungere stessa funzionalità in più di 1 attività di creare 1 un'attività comune come BaseActivity ed estendere l'attività comprenderà che le funzioni comuni nelle vostre ereditato tutte le attività

Per esempio io ho chiamato la funzione checklogin, si può mettere il codice di menù qui,

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 

    } 

ora si può allungare nelle vostre attività

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

Grazie tutti! Questi sono stati davvero utili. Ho finito per utilizzare il campione xml di BrennaSoft. Quindi lo schermo principale di djk/l'esempio di attività di base per ripulire molto il mio codice. – user401183

+0

benvenuto .. sono contento che sia utile per voi – djk

+0

Ho bisogno di dichiarare BaseActivity in 'AndroidManifest.xml'? O non ce n'è bisogno? –

3

È possibile definire un menu in un file XML e quindi caricare il menu in onCreateOptionsMenu. Dovrai comunque gestire ogni voce di menu in ogni attività. È anche possibile creare una classe BaseActivity che gestisca il menu che ogni attività potrebbe estendere.

<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

tenta di utilizzare una classe 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; 
}} 

Ora estendere la classe BaseMenu invece di Activity

credo che questo potrebbe aiutare.

Problemi correlati