Java-Android-将活动/类拆分为多个文件以实现更好的组织(解决方案)

Java-Android-将活动/类拆分为多个文件以实现更好的组织(解决方案),java,android,external,onclicklistener,inner-classes,Java,Android,External,Onclicklistener,Inner Classes,我对JAVA不在行,但我发现自己对Android活动变得太大而发疯。 经过几页的代码长度,我发现自己的永久滚动来回 不仅onClickHandler会变得庞大,而且很多代码往往会在更大的活动中汇总。 碎片对我来说不是解决办法。 一般来说,Java不允许将一个类拆分为多个文件,因此需要进行黑客攻击 关于这一点,我浏览了很多stackoverflow线程,没有一个有解决方案。 反正我解决了,也许这对其他人有帮助 这是一个有点Android化的解决方案,因为我对所有菜单和按钮都使用了巨大的onClic

我对JAVA不在行,但我发现自己对Android活动变得太大而发疯。
经过几页的代码长度,我发现自己的永久滚动来回
不仅onClickHandler会变得庞大,而且很多代码往往会在更大的活动中汇总。
碎片对我来说不是解决办法。
一般来说,Java不允许将一个类拆分为多个文件,因此需要进行黑客攻击

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


这是一个有点Android化的解决方案,因为我对所有菜单和按钮都使用了巨大的onClick处理程序,但我想它同样适用于其他一般Java问题。

一个解决方案很简单,您可以将主类字段
公开

然而,这将打乱你的代码,你应该保持私人领域时,可能的。 除了更好地完成IDE的代码外,它还可以保护类免受非法的外部操作

现在我的窍门是内部类。
内部类可以访问其父类的私有字段,但是Java也不允许将内部类放入另一个文件中。
它必须在父类内部定义。
这就是我开始挖掘的地方,并找到了一个可能被认为是可以接受的解决方案。
如果这伤害了java专家,我希望不要被否决;)

诀窍是在自己的java文件中创建一个“抽象类”。
为了让它脱颖而出,我将它命名为有点超出常规:
InnerMainActivity\u onClickHandlers.java

MainActivity是我的主类(新内部类的父类)

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

private class inner extends InnerMainActivity_onClickHandlers{
    public inner(MainActivity mainActivity)
    {
        super(mainActivity);
    }
};
在my MainActivity.onCreate中:

Button.setOnClickListener(new inner(this));
正如您所看到的,正如您所看到的,它将MainActivity(父级)传递给内部类

现在,内部类自身:

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
    }
}
要使此项工作如广告所示,您需要将MainActivity/父项的
私有属性更改为
受保护的

现在,扩展的内部类拥有对父字段的访问权限,但是任何外部类仍然不能访问它


在本例中,我为所有onclick侦听器提供了一个专用类,第二个类可用于其他用途。

我遵循的一个简单方法是将视图关注点移动到一个单独的类中(我们称之为ViewManager),并使活动/片段仅作为控制器工作

视图管理器通常负责-

  • 扩大布局
  • 获取对所有视图的引用
  • 在视图中显示数据
  • 处理点击/触摸事件
  • 动画
该活动/片段仅负责-

  • 获取数据并将其传递给ViewManager以显示数据
  • 操纵导航
  • 将数据发布到服务器/DB
对于触发控制器负责的操作的UI控件,例如在单击按钮时启动新活动,ViewManager接收单击并调用控制器中负责导航的方法

如果您想进一步消除样板代码(单击处理程序、FIDVIEW BYIDID()调用等),请考虑使用类似于./P>的库。