1

カスタムの画像/テキストビューを含む RelativeLayout があります。それらはすべて共通の多くのメソッドを共有し (現在はインターフェイスに収集されています)、すべてのクラスで同じように実装されています。

既存のビュー間で重複するコードの量を最小限に抑えたいと考えています。Javaには多重継承がないことは知っていますが、同様のコードをすべて保持するビューを作成し、Image/Text/Layout..ビューから継承する方法はありますか?

前もって感謝します

4

2 に答える 2

1

別のクラスを持つことで同様のことを行っています。それを と呼びましょう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);
    }

}
于 2013-09-23T10:19:53.023 に答える
0

単純な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 などから同じことを行うこともできます。インターフェイスのサンプル登録を使用してコールバックを登録し、ロジックを実装するだけです。より多くの情報/コードを提供できれば、簡単にお手伝いできます。

于 2013-09-23T09:56:30.183 に答える