3

初めての Android アプリケーションを作成していますが、問題が発生しました。すべて同じアクションバーを使用する 8 つ以上の異なるクラスがあります。ここで、すべての異なるクラスでメソッドを呼び出す (そして二重のコードがたくさんある) 代わりに、他のクラスでメイン クラスのメソッドを呼び出したいと思います。

これは、main.java の onOptionsItemSelected のコードの一部です。

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle presses on the action bar items
        switch (item.getItemId()) {
        case R.id.actionbar_new_income:
            Intent newIncome = new Intent(this, NewIncome.class);
            this.startActivity(newIncome);
            return true;
} 
}

これまでのところ、別のクラス(newIncome.java)でメソッドを呼び出す方法を考えていましたが、引数を追加する必要があると言い続けています。もちろん、どのメニュー項目がクリックされたかを検出できる必要があります..

MainActivity main = new MainActivity();
        main.onOptionsItemSelected();

何か助けてください。ありがとう!

4

3 に答える 3

4

これを行うべきではありません。共通のコードがある場合は、それを必要とするアクティビティからアクセスできるクラス (アクティビティではない) に配置します。

まだ重複がありますが、これは正常です。

アクティビティ起動コードを削減する良い方法は、アクティビティを起動する呼び出し可能な各アクティビティに静的メソッドを追加することです。

たとえば、あなたのNewIncomeアクティビティで

Public static void Launch(Context c) {
    Intent newIncome = new Intent(c, NewIncome.class);
    C.startActivity(newIncome);  
}

次に、呼び出すだけで、他のアクティビティからこのアクティビティを起動できます

NewIncome.Launch(this);

必要に応じて、メソッドにパラメーターを追加し、これらのパラメーターを使用してアクティビティにエクストラを追加できます。

于 2013-10-13T11:50:17.267 に答える
1

メニュー エントリが含まれているアクティビティから完全に独立している場合は、次の例のようにすることができます。

それぞれの活動で

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  return CommonClass.HandleMenu(this, item.getItemId());
}

一般クラスでは

public class CommonClass {

    public boolean HandleMenu (Context c, int MenuEntry) {
        switch (MenuEntry) {
           case R.id.actionbar_new_income:
             NewIncome.Launch(c);
          etc....
          ...
    }


}
于 2013-10-13T12:24:18.493 に答える
1

8 つのクラスがアクティビティである場合onOptionsItemSelected、必要なアクションバーに要素を配置するベース アクティビティを定義できます。次に、他のアクティビティをそこから派生させます。

于 2013-10-13T17:00:11.763 に答える