1

我有一个包含自定义图像/文本视图的 RelativeLayout,所有这些共享许多共同的方法(当前收集在一个接口中)并且在所有类中实现相同。

我想尽量减少现有视图之间的重叠代码量。我知道 Java 中没有多重继承,但是有没有办法创建一个视图来保存所有类似的代码,并从 Image/Text/Layout.. 视图继承?

提前致谢

4

2 回答 2

1

我通过开设一个单独的课程来做类似的事情,我们称之为ViewHelper。这个类只有公共静态方法来执行你想要在接口实现中拥有的东西。我从每个实现中调用这个类。这不是一个完美的解决方案,因为我仍然有一些重复的代码,但我只是从每个实现中调用一个公共静态方法,而我在单个类中实现了 - 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 回答