2011-02-04 30 views
9

私は、共通のコードを複数のアクティビティに含める方法を理解しようとしています。複数のアクティビティに同じコンテキストメニューを追加する

具体的には、いくつかのアクティビティに含めるコンテキストメニューがあります。 これを見ましたが、複数のアクティビティにどのように拡張するのか分かりません。 http://developer.android.com/guide/topics/ui/menus.html

私は、これはXMLファイルにメニューを定義し、onCreateOptionsMenuでメニューを読み込むことができ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

あなたはBaseActivityのような1つの一般的な活動 を作成し、その活動を広げるよりも、1つの以上の活動で同じ機能を追加したい場合は、あなたの継承されたすべての活動にその共通の機能が含まれます

たとえば、私はchecklogin関数を呼び出しています、あなたのメニューコードは今、あなたの活動にそれを拡張することができ、ここで

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

感謝を

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 } 

を置くことができます すべて!これらは本当に役に立ちました。私は両方のBrennaSoftのXMLサンプルを使用して終了しました。次に、djkのメイン画面/ベースアクティビティのサンプルで、自分のコードをたくさんクリーンアップします。 – user401183

+0

ようこそ。私はあなたにとって有益だとうれしいです。 – djk

+0

BaseActivityを 'AndroidManifest.xml'で宣言する必要がありますか?またはこれは必要ありませんか? –

3

として設定しています。それでも各アクティビティーの各メニュー項目を処理する必要があります。また、各アクティビティが拡張できるメニュー項目を処理するBaseActivityクラスを作成することもできます。

<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

今、私は、これはあなたを助けることができると思うの代わりにActivity

のクラスBaseMenuを拡張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; 
}} 

を使用してみてください。

関連する問題