2011-02-04 29 views
9

Próbuję dowiedzieć się, jak dołączyć typowe fragmenty kodu w wielu działaniach.Dodawanie tego samego menu kontekstowego do wielu działań

Dokładniej, mam menu kontekstowe, które chciałbym uwzględnić w kilku działaniach. Widziałem to, ale po prostu nie rozumiem, jak rozszerzyć na wiele działań. http://developer.android.com/guide/topics/ui/menus.html

mam to skonfigurować jako 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; 
    } 


} 

Odpowiedz

23

jeśli chcesz dodać tę samą funkcjonalność w więcej niż 1 aktywność niż tworzyć 1 wspólnego działania jak BaseActivity i rozszerzyć tę działalność będzie obejmować wspólne funkcje w swoich dziedzicznych wszystkich działań

np nazwałem funkcja checklogin, można umieścić swój kod Menu tutaj,

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 

    } 

teraz możesz przedłużyć go w swoich działaniach

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

Dzięki wszystko! Te były naprawdę pomocne. Skończyłem z wykorzystaniem xml BrennaSoft. Następnie przykład głównego ekranu/podstawowej aktywności djk, aby bardzo wyczyścić mój kod. – user401183

+0

witamy .. Cieszę się, że ci się przydaje – djk

+0

Muszę zadeklarować BaseActivity w "AndroidManifest.xml"? Lub Nie potrzebujesz tego? –

3

Można zdefiniować menu w pliku XML, a następnie załadować menu w onCreateOptionsMenu. Nadal będziesz musiał obsługiwać każdy element menu w każdym działaniu. Można również utworzyć klasę BaseActivity, która obsługuje elementy menu, które każde działanie może rozszerzyć.

<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

spróbuje użyć abstract klasę

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

Teraz rozszerzyć klasę BaseMenu zamiast Activity

myślę, że to mogłoby pomóc.

Powiązane problemy