2012-02-23 13 views
-1

私は自分のアクティビティとアクティビティグループのすべてで利用可能にしたいコードセットを持っているアプリケーションを作成しています。しかし、これを達成するために、私は私の活動を拡大していますアクティビティとアクティビティグループの拡張

//custom Activity 
public abstract class BaseActivity extends Activity 
//custom ActivityGroup 
public abstract class BaseActivityGroup extends ActivityGroup 

//implemented activities in my app 
public class PickUser extends BaseActivity 
//and 
public class Home extends BaseActivityGroup 

今の事ですが、私はBaseActivityで書くカスタムコードは、私は(現在の実装のように)あまりにもBaseActivityGroupで同じことを書かなければならないものは何でも。これはコードシンクの問題が発生しやすく、良いテクニックではないと思います。 BaseActivityクラスから考えられる -

だから、どのように私は私だけBaseActivityでカスタムコードを記述し、私のBaseActivityGroupActivityGroupを拡張するような方法で私の拡張を行うことができますか?

私はアンドロイドでアンドロイドがこれを行う方法を観察し、そのActivityGroup場合活動クラスを拡張します。そして、私はまた、実際に(拡張活動です)BaseActivityを拡張(BaseActivityGroupとして知られている)私のカスタムActivityGroupクラスを書きたいです。

アイデア/提案はありますか?

答えて

0

まずにおける活動の子が悪いされているので、使用すべきではないよう

+0

しかし、私はアクティビティメソッドにアクセスする必要もありませんActivityDelegateクラスを保持します。ではない? – waqaslam

+0

例を編集して、アクティビティがデリゲートの参照として保存されるようにしました。次に、必要なすべての一般的なActivityメソッドにコールバックすることができます。 –

+0

しかし、どのように活動のライフサイクルを処理するには?あなたの実装に 'super.onCreate(savedInstanceState);'がありません。これを解決するには? – waqaslam

0

追加の最終クラスを追加します。これは、ベースと呼ばれます。メソッドのみが含まれます この1は、そのような例の場合と同様に、他の基本クラスによって呼び出される:

public static boolean createOptionsMenu(final Menu menu, 
     final MenuInflater inflater) { 
    inflater.inflate(R.menu.main_menu, menu); 
    return true; 
} 

次に、あなたのBaseActivityとBaseActivityGroupクラスでは、あなたが呼び出します。

@Override 
public final boolean onCreateOptionsMenu(final Menu menu) { 
    return Base.createOptionsMenu(menu, getMenuInflater()); 
} 

がそれを願っています助けて!すべてがすべてACTIVITYGROUPSのアンドロイド

+0

実際には、静的メソッドは必要ありません。私は簡単に**サービスバインディング**、**本格的なセッション更新**、いくつかの**ブロードキャストリスニング**を提供するカスタムメソッドを書いてきました。クラスファイルで利用できるようにするために不可欠な私の基底クラスで** – waqaslam

0

ちょうどBaseGroupActivity含むBaseActivityにすべてを拡張します。それらは非推奨であり、複数のフラグメントで単一のアクティビティを使用することが推奨されます。

アクティビティグループを使用する必要がある場合は、おそらくデリゲートパターンを実装することをお勧めします。

onCreate、onResumeなどのすべての一般的なメソッドを処理し、そのベースで使用するデリゲートを作成します。この例では、デリゲートのアクティビティへの参照を保存します。この循環的な参照は美味ではないかもしれません。代わりに、デリゲート内のメソッドにアクティビティを渡すこともできます。

public class ActivityDelegate() { 
    private Activity mActivity; 

    public ActivityDelegate(final Activity activity) { 
     mActivity = activity; 
    } 
    public void onCreate(final Bundle savedInstanceState) { 
     // Do stuff. 
    } 
} 


public abstract class BaseActivity extends Activity { 
    private ActivityDelegate mDelegate = new ActivityDelegate(this); 

    public void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mDelegate.onCreate(savedInstanceState); 
    } 
    ... 
} 

public abstract class BaseActivityGroup extends ActivityGroup { 
    private ActivityDelegate mDelegate = new ActivityDelegate(this); 

    public void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mDelegate.onCreate(savedInstanceState); 
    } 
    ... 
} 
+0

** BaseActivity **にすると、すべてのクラスは** Activity **のインスタンスになります。これは私が必要とするケースではありません** ActivityGroup ** too – waqaslam

0

あなたは別のファイルにログインすることができます。ファイル内にアクティビティインスタンスが必要な場合は、BaseActivityBaseActivityGroupの両方から同じメソッドを呼び出します。コンテキストをコンストラクタに渡します。

関連する問題