2016-04-15 7 views
2

私は同じツールバーで3つのアクティビティを持っています。私は各アクティビティでコードをコピーしないようにしたいと思います。私は、すべてのレイアウトに<include>タグを使用して、ツールバーの同じレイアウトを再利用できることを知っています。今度は、すべてのアクティビティでツールバーの各ボタンのイベントハンドラを共有したいと思います。私はtoolbarActivityextends Activityクラスと3つのアクティビティextends toolbarActivityを作成することを考えています。したがって、onCreateメソッドでは、base.OnCreateを呼び出すと、すべてのイベントハンドラが定義されます。しかし、SetContentLayoutはまだ呼び出されていないので、base.OnCreateはボタンを見つけられません。 3つのアクティビティに異なるレイアウトがあることを忘れないでください。 OnCreateメソッド内のすべてのイベントハンドラをすべてのアクティビティにコピーしたり、一部の機能をオーバーライドするのを避けるために、コードを再利用する最善の方法を知っていますか?androidのコードの再利用性

+1

これはT – zgc7009

+1

のフラグメントです。なぜ3つのフラグメントで1つのアクティビティを使用しないのですか? – SMR

答えて

2

Androidはモバイルデバイスで使用されるため、開発時にはAndroidデバイスのサイズとサイズを知ることはできません。大規模なデバイスでは、多くのUI要素が適合します。より小さいデバイスでは、UI要素が少なくて済みます。あなたの質問はこのジレンマに関係しているので、多くの可能な答えがあります。論理的にはコードが動作するためにはソース内に存在していなければなりません。つまり、同じ "ツールバー"の多くのバージョンで終わるか、または "外部"ツールバーを参照/参照できるので、悪い解決策を切り取って貼り付けることができます。別々のソースファイルを持っているように、断片が心に浮かび上がる。 UIソースファイルはペアとして考えることができます。動的要素の場合はJava、静的要素の場合はxml。つまり、要約すると、ツールバーを実装した外部フラグメントを参照するだけです。

1

アクティビティの参照に関連付けられたボタンやその他のレイアウトの名前付け規則をそのまま使用する場合は、問題はありません。

たとえば、あるレイアウトに '@ + id/login_button'がある場合、次のレイアウトで同じタイプのボタンに同じ表記を使用するだけで問題ありません。

1

他のすべてのアクティビティが拡張する基本アクティビティを定義し、クリックリスナ(またはボタンの押下を待機するために使用するインターフェイス)を実装することができます。クリックしたビューのIDを確認して、必要なロジックを実行するためのコールバックを提供することができます。

public class BaseActivity extends Activity implements OnClickListener { 

    public void onCreate() { 
     myBtn.setOnClickListener(this); 
    } 

    public void onClick(View v) { 
     if (R.id.my_btn == v.getId()) { 
      onFoo(); 
     } 
    } 

    protected void onFoo() { 
     // TODO handle foo 
    } 
} 

異なる動作を行う必要がある場合は、サブクラスのメソッドをオーバーライドできます。

public class DifferentActivity extends BaseActivity { 
    @Override protected void onFoo() { 
     super.onFoo() 
     // TODO handle foo differently 
    } 
} 
+0

BaseActivityのmyBtnは定義されていません。コンテンツレイアウトをまだ設定していないからです。これが私の問題です。 –

+1

onPostCreate()でリスナーを設定できます。 – fractalwrench

関連する問題