アンドロイド:どのようにオーバーライドされたメソッドを再記述することなく、各(一覧)活動での共有メニューを持っていますか?

StackOverflow https://stackoverflow.com/questions/2006457

質問

私はAndroidがメニューを定義するために上書きされるいくつかの有用な方法を提供することを知っています:

    @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
                // ...
  return true;
 }

 public boolean onOptionsItemSelected(MenuItem item) {
  Intent i;
     switch (item.getItemId()) {
     case AIS: i = new Intent(this, ActivityInventorySheet.class);
      startActivity(i);
               return true;
     // ...
     }
     return false;
 }

私は私のAndroidアプリケーションのそれぞれの活動とListActivityで共有、このメニューを持っていると思います。これは、クリック内のアプリケーションのすべての部分にユーザーのジャンプをすることができますそれぞれの(一覧)活動に標準メニューを持つためである。

今、これを実現する最も簡単な方法は、アプリケーションのすべて(一覧)活動で両方の方法をコピーアンドペーストすることです。私が書いたコードのこの冗長性を好きではない:)

は、合理的な選択をサブクラス化されていますか?私はすでにそのサブクラス化は非常にうまく機能していない私のListActivityの1を(問題を与えているデータベースからオブジェクトを取り出すのスレッドを)見てきました。 メニューを共有する他の方法がありますが活動?

おかげ

役に立ちましたか?

解決

私は、これは完全に機能しない理由を見ない。

public abstract class MyListActivity extends ListActivity
{
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      menu.add(0, AIS, 0, "Activity Inventory Sheet").setIcon(android.R.drawable.ic_menu_upload);
      // ...
      return true;
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      Intent i;
      switch (item.getItemId()) {
          case AIS: i = new Intent(this, ActivityInventorySheet.class);
          startActivity(i);
          return true;
          // ...
      }
      return false;
   }    
}

それからちょうどあなたの活動ではなくListActivityのMyListActivityを拡張しています。

  

私はすでにそのサブクラス化を見てきました   私のListActivityの一つは、動作しません。   非常によく(取得スレッド   データベースからオブジェクトを与えています   問題)。

これは完全に別の問題のように聞こえます。あなたはこのについての個別の質問を投稿することができます。単にあなたが記述しているようなすべての問題を作成しないでくださいJavaでクラスを拡張します。

他のヒント

私は、その後、それぞれの活動は、その活動に特有の、さらにメニュー項目を追加することができ、そのヘルパークラスに委譲する一般的なタスクを、そしてなどonCreateOptionsMenu、独自に定義して初期化し、共通のメニューオプションを処理するための静的メソッドを持つヘルパークラスを使用します。

のようなもの。

class SharedMenu {
    public static void onCreateOptionsMenu(Menu menu) {
        menu.add(...);
        menu.add(...);
    }
}

public class MyActivity extends Activity {

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.add(...);  // specific to this activity
        SharedMenu.onCreateOptionsMenu(menu);
        return true;
    }

}

onMenuItemSelectedなどのための複数のメソッドを持つ。

編集:私は、で開始する活動のための1とリスト活動のために別のものを、それらのうちの2つを必要とするだろうし、その後、私の場合、私はいくつかのカスタムメニューオプションを追加する必要があるので、私は、共通の基本クラスを使用していませんよ活動ます。

私はちょうどそれを管理するために GreenDroidするに機能を追加しました。それをチェックアウトし、非常に便利です。 私は後の例を投稿してみましょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top