Java 在android中创建主抽象视图
我有一个RelativeLayout,其中包含自定义图像/文本视图,所有这些视图共享许多共同的方法(当前在接口中收集),并且在所有类中实现相同 我希望最小化现有视图之间的重叠代码量。我知道Java中没有多重继承,但是有没有办法创建一个视图来保存所有类似的代码,并从Image/Text/Layout继承。。观点Java 在android中创建主抽象视图,java,android,android-relativelayout,abstraction,Java,Android,Android Relativelayout,Abstraction,我有一个RelativeLayout,其中包含自定义图像/文本视图,所有这些视图共享许多共同的方法(当前在接口中收集),并且在所有类中实现相同 我希望最小化现有视图之间的重叠代码量。我知道Java中没有多重继承,但是有没有办法创建一个视图来保存所有类似的代码,并从Image/Text/Layout继承。。观点 提前感谢创建一个简单的Java类来保存您的逻辑并在那里编写代码,并且有一个接口来执行回调逻辑,将您的接口回调路由到您创建的类。下面我给出了一个示例实现/伪代码 public class S
提前感谢创建一个简单的
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()从任何类调用它;这对我来说似乎是一个很好的方法,如果这些类中也有相似的变量,你会怎么做?像一个点来指示视图在其父视图中的位置吗?这取决于实现细节,但如果实现类似,则在新的静态帮助器方法中发送该对象,并在那里进行相同的工作。如果你能分享一些例子,这个讨论会更有成效。这对我来说似乎是个好方法,如果这些类中也有类似的变量,你会怎么做?像一个点来指示视图在其父视图中的位置吗?这取决于实现细节,但如果实现类似,则在新的静态帮助器方法中发送该对象,并在那里进行相同的工作。如果你能分享一些例子,这个讨论会更有成效。