Java-Android-将活动/类分为多个文件,以提高组织性(解决方案)


问题内容

我不是JAVA的专业人士,但是我发现自己因Android活动变得过大而发疯。
经过几页代码长度后,我发现自己一直来回滚动!
不仅OnClickhandlers可以发展壮大,而且很多代码往往会总结为更大的活动。
碎片对我来说不是解决方案。
通常,Java不允许将一个类拆分为多个文件,因此需要进行修改。

关于这一点,我浏览了很多stackoverflow线程,没有一个解决方案。
无论如何我都解决了,也许这对其他人有帮助。

这是Android的一个重点,因为我为所有菜单和按钮所占用的庞大的onClick
Handler感到烦恼,但我想它也可以以其他方式适用于其他一般Java问题。


问题答案:

一种解决方案很简单,您可以使主类字段成为可能,public
但是这会使您的代码混乱,因此应尽可能将字段设置为私有。除了可以更好地完成IDE的代码完成之外,它还可以保护类免受非法的外部操纵。

现在对我来说,诀窍是内部类。
内部类可以访问其父级的私有字段,但是Java也不允许将内部类放入另一个文件中。
它必须在父类内部定义。
在这里,我开始进行挖掘并找到了可以被接受的解决方案。
如果这伤害了Java专家,我将不胜感激;)

诀窍是在自己的Java文件中创建“抽象类”。
我在惯例之外对其进行了命名,以使其脱颖而出:InnerMainActivity_onClickHandlers.java
MainActivity是我的主类(新内部类的父类)

在我的Parentclass中,我定义了这个字段,一个普通的内部类,但 扩展 了新类:

private class inner extends InnerMainActivity_onClickHandlers{
    public inner(MainActivity mainActivity)
    {
        super(mainActivity);
    }
};

在我的MainActivity.onCreate中:

Button.setOnClickListener(new inner(this));

如您所见,如您所见,它将MainActivity(父类)传递给Inner类。

现在,内部类就这样:

public abstract class InnerMainActivity_onClickHandlers implements View.OnClickListener
{
    private final MainActivity main;

    public InnerMainActivity_onClickHandlers(MainActivity mainActivity)
    {
        this.main = mainActivity;
    }

    @Override
    public void onClick(View view)
    {
       // here implement the listener
    }
}

为了使此功能如广告所示,您需要将privateMainActivity / Parent 的属性更改为protected
现在,扩展的内部类具有对父字段的访问权限,但是任何外部类仍无法访问它。

在这种情况下,我为所有onclick侦听器提供了一个专用的类,可以将第二个类用于其他用途。