Java 在android中创建主抽象视图

Java 在android中创建主抽象视图,java,android,android-relativelayout,abstraction,Java,Android,Android Relativelayout,Abstraction,我有一个RelativeLayout,其中包含自定义图像/文本视图,所有这些视图共享许多共同的方法(当前在接口中收集),并且在所有类中实现相同 我希望最小化现有视图之间的重叠代码量。我知道Java中没有多重继承,但是有没有办法创建一个视图来保存所有类似的代码,并从Image/Text/Layout继承。。观点 提前感谢创建一个简单的Java类来保存您的逻辑并在那里编写代码,并且有一个接口来执行回调逻辑,将您的接口回调路由到您创建的类。下面我给出了一个示例实现/伪代码 public class S

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

我希望最小化现有视图之间的重叠代码量。我知道Java中没有多重继承,但是有没有办法创建一个视图来保存所有类似的代码,并从Image/Text/Layout继承。。观点


提前感谢

创建一个简单的
Java类
来保存您的逻辑并在那里编写代码,并且有一个接口来执行回调逻辑,将您的接口回调路由到您创建的类。下面我给出了一个示例实现/伪代码

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

创建一个简单的
Java类
来保存您的逻辑并在那里编写代码,并且有一个接口来执行回调逻辑,将您的接口回调路由到您创建的类。下面我给出了一个示例实现/伪代码

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等执行相同的操作。只需使用接口的示例注册来注册回调并实现您的逻辑。如果你能提供更多的信息/代码,这将很容易帮助你。

我正在做一件类似的事情,通过使用一个单独的类,让我们称之为
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);
    }
}
或:

或:


我使用一个单独的类来做类似的事情,我们称它为
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);
    }
}
或:

或:


您可以创建一个自定义视图,让它从视图扩展,并让视图的所有子类从该视图扩展。据我所知,我没有想到一个简单的解决办法(例如多重继承),但是如果我扩展View,那么我将失去对ImageView的所有支持,导致我重新实现那里使用的所有逻辑,我错了吗?您可以创建一个自定义视图,让它从视图扩展,并让视图的所有子类都从该视图扩展。据我所知,我没有想到简单的解决方法(例如多重继承),但如果我扩展View,那么我将失去对ImageView的所有支持,导致我重新实现那里使用的所有逻辑,我错了吗?问题是我所有的逻辑在所有类中都是相同的,我必须以同样的方式在他们所有人身上实施它。我想避免一件事,你所要做的就是为你的逻辑创建一个singleton,并用singleton.getInstance().callsomeMethod()从任何类调用它;问题是我的所有逻辑在所有类中都是相同的,我必须在所有类中以相同的方式实现它。我想避免一件事,你所要做的就是为你的逻辑创建一个singleton,并用singleton.getInstance().callsomeMethod()从任何类调用它;这对我来说似乎是一个很好的方法,如果这些类中也有相似的变量,你会怎么做?像一个点来指示视图在其父视图中的位置吗?这取决于实现细节,但如果实现类似,则在新的静态帮助器方法中发送该对象,并在那里进行相同的工作。如果你能分享一些例子,这个讨论会更有成效。这对我来说似乎是个好方法,如果这些类中也有类似的变量,你会怎么做?像一个点来指示视图在其父视图中的位置吗?这取决于实现细节,但如果实现类似,则在新的静态帮助器方法中发送该对象,并在那里进行相同的工作。如果你能分享一些例子,这个讨论会更有成效。