java - 将 OnClick 内容单独放在另一个类中

标签 java android butterknife

我想将 OnClick 内容分离到另一个类中。
将 onclick 内容分离到另一个类中好吗?
如果是,我的编码方式是正确的方式还是有人可以告诉我更好的方式?

public class MainActivity extends AppCompatActivity {

    private ButtonsActions mButtonsActions;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        mButtonsActions = new ButtonsActions(this);
    }

    @OnClick(R.id.btn1)
    public void btnTest1() {
        mButtonsActions.btnTest1();
    }

    @OnClick(R.id.btn2)
    public void btnTest2() {
        mButtonsActions.btnTest2();
    }

}


public class ButtonsActions {

    private MainActivity view;

    public ButtonsActions(MainActivity view) {
        this.view = view;
    }

    public void btnTest1() {
        Toast toast = Toast.makeText(view, "Button 1 clicked!", Toast.LENGTH_SHORT);
        toast.show();
    }

    public void btnTest2() {
        Toast toast = Toast.makeText(view, "Button 2 clicked!", Toast.LENGTH_SHORT);
        toast.show();
    }

}

最佳答案

您的问题没有确切答案。

您想要实现的目标是什么?

对我来说,这听起来像是您想要关注点分离。

MVC 解决此类问题会很棒,但不幸的是 Android 应用程序的结构不允许您实现它。

那么有哪些选择?

好吧,你仍然可以分离关注点,但不是你这样做的方式,你放入不同类中的代码都与 UI 相关,这样的代码应该保留在 Activity 内部因为它属于表示层

您需要做的是将所有业务逻辑抽象到单独的类中。

您可以使用数据库逻辑执行相同的操作。

然后,您将能够通过实现设计模式来更进一步,因为它可能适合例如存储库模式,以通过服务进行所有数据库事务。

或者您可能构建一个 API 服务,所有网络任务都通过它执行。

最后,如果您想更进一步,请应用可靠的原则和依赖项注入(inject),创建 util 类以实现可重用性并进行单元测试。

关于java - 将 OnClick 内容单独放在另一个类中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41325908/

相关文章:

java - 读取返回 StreamingResponseBody 作为响应的 API

java - HTTP 获取请求 - Android - 无法启动 Activity ComponentInfo{

android - 无法同步 Gradle,找不到 com.android.support :support-annotations:23. 3.0

android - 实现 ButterKnife 给出 NullPointer 异常

android - ButterKnife 8.0.1 不工作

java - SpringMVC 处理剩余 Controller 中的错误

java - 如何从 java 中的数组制作基于图 block 的 map ?

java - 如何在运行时/不重新启动时将 jar 文件添加到 Apache Storm EXTLIB?

java - 使用 Jackson 反序列化

java - 无法更改 Android 应用程序中的默认字体