カスタムの画像/テキストビューを含む RelativeLayout があります。それらはすべて共通の多くのメソッドを共有し (現在はインターフェイスに収集されています)、すべてのクラスで同じように実装されています。
既存のビュー間で重複するコードの量を最小限に抑えたいと考えています。Javaには多重継承がないことは知っていますが、同様のコードをすべて保持するビューを作成し、Image/Text/Layout..ビューから継承する方法はありますか?
前もって感謝します
カスタムの画像/テキストビューを含む RelativeLayout があります。それらはすべて共通の多くのメソッドを共有し (現在はインターフェイスに収集されています)、すべてのクラスで同じように実装されています。
既存のビュー間で重複するコードの量を最小限に抑えたいと考えています。Javaには多重継承がないことは知っていますが、同様のコードをすべて保持するビューを作成し、Image/Text/Layout..ビューから継承する方法はありますか?
前もって感謝します
別のクラスを持つことで同様のことを行っています。それを と呼びましょうViewHelper
。このクラスには、インターフェイスの実装に必要なものを実行する public static メソッドのみがあります。そして、各実装からこのクラスを呼び出しています。重複したコードがまだいくつかあるため、これは完全な解決策ではありませんが、単一のクラスで実装を行っている間、各実装から public static メソッドを呼び出すだけです - ViewHelper
.
以下に、いくつかの一般的なコード例で私が何を意味するかを説明しようとします。
インターフェース:
public interface IView {
public void someMeth(View view);
}
ViewHelper
:_
public class ViewHelper {
public static void someMethImpl(View view) {
/**
* here you'll have the implementation if the implementation can be
* abstracted to a View
*/
}
public static void someMethImpl(ImageView view) {
/**
* here you'll have the implementation if the implementation can be
* abstracted to an ImageView
*/
}
}
次に、カスタム ビュー/ビューグループ クラスごとに次のようにします。
public class CustomRelativeLayout extends RelativeLayout implements IView {
/// constructors
@Override
public void someMeth(View view) {
ViewHelper.someMethImpl(this);
}
}
また:
public class CustomImageView extends ImageView implements IView {
// constructors
@Override
public void someMeth(View view) {
ViewHelper.someMethImpl(this);
}
}
また:
public class CustomTextView extends TextView implements IView {
// constructors
@Override
public void someMeth(View view) {
ViewHelper.someMethImpl(this);
}
}
単純なJava class
ロジックを作成してそこにコードを記述し、コールバック ロジックを実行するインターフェイスを用意して、作成したクラスにインターフェイス コールバックをルーティングします。以下にサンプルの実装/疑似コードを示します。
public class SampleLogicClass implements SampleInterface{
public sample(){
}
@Override
public void callLogic1(){
// Write something
}
@Override
public void callLogic2(){
// Write something
}
public void registerInterface(SampleInterface interface){
sampleInterface = interface;
}
public interface SampleInterface(){
void callLogic1();
void callLogic2();
}
}
RelativeLayout/AnyView/ViewGroup などから同じことを行うこともできます。インターフェイスのサンプル登録を使用してコールバックを登録し、ロジックを実装するだけです。より多くの情報/コードを提供できれば、簡単にお手伝いできます。