3

我正在开发我的第一个 android 应用程序,由于我的代码很快变得一团糟,我决定遵循 MVP 模式。
我的应用程序分为视图(片段)、演示者和合同(与视图及其演示者将用于通信的方法的接口)。
我的问题是我有一个包含用户位置字段的表单,我使用 Google 位置 API 检索该字段。我有一个 LocationHelper 类,它负责检查/询问权限、构建 google API 客户端、获取位置等。
但是,我不知道将使用此类的代码放在哪里:我的第一种方法是在演示器中实例化它,因为它比 UI 内容更多的是业务逻辑,但是许多方法需要调用者活动作为参数。例如构建 Google API 客户端:

mGoogleApiClient = new GoogleApiClient.Builder(context)
            .addConnectionCallbacks((GoogleApiClient.ConnectionCallbacks) current_activity)
            .addOnConnectionFailedListener((GoogleApiClient.OnConnectionFailedListener) current_activity)
            .addApi(LocationServices.API).build();

或位置设置请求:

status.startResolutionForResult(current_activity,REQUEST_CHECK_SETTINGS);

但是,根据我在 MVP 中的理解,演示者应该没有上下文/android 代码。在这种情况下,最佳做法是什么?

4

1 回答 1

1

我建议您阅读此链接。您可以使用 Dagger 注入上下文而无需将其传递给演示者,但我认为这根本不是一个坏习惯。

在我的项目中,我经常在 BasePresenter 中使用这一行来获取所有上下文,而不是从 Activity 中获取;

        this.mContext = CorretorApplication.getInstance().getApplicationContext();
于 2017-10-30T14:09:49.167 回答