我有一个包含自定义图像/文本视图的 RelativeLayout,所有这些共享许多共同的方法(当前收集在一个接口中)并且在所有类中实现相同。
我想尽量减少现有视图之间的重叠代码量。我知道 Java 中没有多重继承,但是有没有办法创建一个视图来保存所有类似的代码,并从 Image/Text/Layout.. 视图继承?
提前致谢
我有一个包含自定义图像/文本视图的 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 等执行相同的操作。只需使用接口的示例注册注册回调并实现您的逻辑。如果您可以提供更多信息/代码,则很容易为您提供帮助。