繁体   English   中英

在android中创建一个主抽象视图

[英]Create a main abstract View in android

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

我想最小化现有视图之间的重叠代码量。 我知道Java中没有多重继承,但是有什么方法可以创建一个视图来保存所有相似的代码,并从Image / Text / Layout ..视图继承?

提前致谢

我通过拥有一个单独的类来做类似的事情,我们称之为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);
    }

}

创建一个简单的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等中执行相同的操作。只需使用接口的示例注册来注册回调,并实现您的逻辑即可。 如果您可以提供更多信息/代码,将很容易为您提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM