2016-07-08 2 views
-3

私は、同じレイアウトとメニューオプションを使用して、同じツールバーを使用して、2つの異なる活動があるとします。この部分は問題ありません。Android Studioのツールバー機能に別のクラスを使用していますか?

特定の関数を実行するメニューオプションが必要な場合は、自然に関数foo()を作成し、メニューオプションが選択されているときに呼び出します。 onOptionsItemSelected(MenuItem item)メソッドは私が個々の活動で個別に扱うため、静的な "ツールバー機能"を持つ別のクラスを使用することをお勧めしますか?例えば。任意のアクティビティからツールバーのドロップダウンメニューからアクセシビリティ機能を持つlogout()があります。

しかし、明らかなように、私はこの問題に関して「ベストプラクティス」を見つけることはできません。だから、同じ "ツールバー機能"を呼び出す複数のアクティビティを処理するためのベストプラクティスは何ですか?

例コード:MainActivitySecondActivityの両方に同じツールバーがあります。 acitivitesの両方で他の

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 

どこか:両方onCreate()方法で

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.item_foo: 
      ToolbarFunctions.foo(); //Is this a good way to do it? 
     default: 
      break; 
    } 

    return super.onOptionsItemSelected(item); 
} 
+0

はい..それを行う.. !! –

+0

「アンドロイド」と「アンドロイドスタジオ」の間に違いが見られない別の人。 –

答えて

0

これは、メインの親アクティビティクラスを使用しており、他のすべてのアクティビティを拡張しています。親アクティビティーの例を次に示します。

したがって、MyParentActivityから次のコードに拡張されたアクティビティーを定義することができます。それがすべてです:

public class MyOtherActivity extends MyParentActivity { 

    // Here your function will be called in every time 
    // when you click to Toolbar buttons! 
    // 
    // And you don't need write again about clicking menu! 

    @Ovveride 
    public void foo() { 

    //Any your behaviour 

    } 

} 
+0

ニース。だから私は1つのアクティビティでメニューに余分なオプションを持たせたいなら、 'onOptionsItemSelected()'メソッドを上書きするか、そのアクティビティに対して別のツールバーを作成する必要がありますか? – blae

+0

@blaeはい、あなたは、特別な動作のために、あなたが望むメソッドをオーバーライドすることができます... – GensaGames

0

あなたはBaseActivityクラスを定義することができますし、BaseActivityから他のすべての活動を広げます。共通部分をBaseActivityに含めることになります。

0

もしあなたのfoo()関数は、ロジックのみなしビューロジックを持っている、そして、より速く、ユニットテストが可能になります静的class.Itでそれを維持することをお勧めします。 BaseActivityの例と比べてビューロジックがある場合。それはビューと機能ロジックを持っている場合は静的であることが良いかもしれませんまた、あなたのビューの更新のためのメソッドとのインターフェイスを実装する必要がBaseActivityを拡張します。あなたはあなたに渡す静的なfoo()メソッドは、それを呼び出すアクティビティーにインターフェースとともに戻って、アクティビティーがビューをそれ自身で更新できるようにします。あなたはまだあなたのfoo()メソッドを単体テストできます。

public interface FooInterface{ 
    void onFooDone(Foo foo); 
} 

public static void foo(FooInterface fooInterface){ 
calculate... 
    if(fooInterface!=null) 
    fooInterface.onFooDone(fooObject); 
} 

あなたの活動は、(この)FooInterface を実装し、FOOを呼び出す必要があります。

関連する問題